力扣题目训练(17)

news/发布时间2024/5/16 1:14:10

2024年2月10日力扣题目训练

  • 2024年2月10日力扣题目训练
    • 551. 学生出勤记录 I
    • 557. 反转字符串中的单词 III
    • 559. N 叉树的最大深度
    • 241. 为运算表达式设计优先级
    • 260. 只出现一次的数字 III
    • 126. 单词接龙 II

2024年2月10日力扣题目训练

2024年2月10日第十七天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的。

551. 学生出勤记录 I

链接: 出勤记录
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是一个简单的遍历,只需在遍历时判断是否不符合条件的情况即可。
代码:

class Solution {
public:bool checkRecord(string s) {int re1 = 0;int re2 = 0;for(int i = 0; i < s.size(); i++){if(s[i] == 'A'){re1++;re2 = 0;if(re1 == 2) return false;}else if(s[i] == 'L'){re2++;if(re2 == 3) return false;}else{re2 = 0;}}return true;}
};

557. 反转字符串中的单词 III

链接: 反转字符串中的单词
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题主要是遍历找到空格,根据空格将单词进行反转。
代码:

class Solution {
public:string reverseWords(string s) {int left = 0;string ans;for(int i = 0; i < s.size(); i++){if(s[i] == ' '){string tmp = s.substr(left,i-left);cout<<"asdf:"<<tmp<<endl;reverse(tmp.begin(),tmp.end());ans += tmp;ans += ' ';left = i+1;}}if(left != s.size()){string tmp = s.substr(left,s.size()-left);reverse(tmp.begin(),tmp.end());ans += tmp;}return ans;}
};

559. N 叉树的最大深度

链接: N 叉树的最大深度
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题求N叉树的深度,与543. 二叉树的直径类似,只是从二叉树拓展到N叉树而已。大家也可以先写一下104. 二叉树的最大深度添加链接描述和543. 二叉树的直径进行锻炼之后再写这道题。
代码:

class Solution {
public:int maxDepth(Node* root) {if(root == NULL) return 0;int maxChildDepth = 0;vector<Node*> children = root->children;for(int i = 0; i < children.size(); i++){int childrenDepth = maxDepth(children[i]);maxChildDepth = max(maxChildDepth,childrenDepth);}return maxChildDepth+1;}
};

241. 为运算表达式设计优先级

链接: 优先级
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题核心就是分治,利用运算符进行分割,递归求解结果。遍历字符串,每次遇到运算符时,将字符串分为运算符左侧和运算符右侧两部分,递归求解这两部分的结果。此外为避免重复计算我们可以利用一个哈希表记录已经计算过的部分。
代码:

class Solution {
public:unordered_map<string,vector<int>> memo;vector<int> findsome(string s){if(memo.find(s) != memo.end()) return memo[s];vector<int> ans;for(int i = 0; i <s.size(); i++){if(!isdigit(s[i])){vector<int> ans1 = findsome(s.substr(0,i));vector<int> ans2 = findsome(s.substr(i+1));if(s[i] == '+'){for(auto& x: ans1)for(auto& y: ans2) ans.push_back(x+y);}else if(s[i] == '-')for(auto& x: ans1)for(auto& y: ans2) ans.push_back(x - y);elsefor(auto& x: ans1)for(auto& y: ans2) ans.push_back(x * y);}}if(ans.empty()) ans.push_back(stoi(s));memo[s] = ans;return ans;}vector<int> diffWaysToCompute(string expression) {return findsome(expression);}
};

260. 只出现一次的数字 III

链接: 只出现一次的数字
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题考虑位运算,我们知道异或运算有以下性质:
任何数和 0做异或运算,结果仍然是原来的数,即 x⊕0=x;
任何数和其自身做异或运算,结果是 0,即 x⊕x=0;

根据这条性质,我们将数组中的所有数字进行异或运算,得到的结果即为两个只出现一次的数字的异或结果。但由于这两个数字不相等,因此异或结果中至少存在一位为 1。我们可以通过 lowbit 运算找到异或结果中最低位的 1,并将数组中的所有数字按照该位是否为 1分为两组,这样两个只出现一次的数字就被分到了不同的组中。 从而得到结果。

代码:

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {long long sum = 0;for(auto& num:nums) sum ^= num;int lsb = sum &(-sum);int a = 0,b = 0;for (auto& num: nums) {if (num & lsb) {a ^= num;}else {b ^= num;}}return {a,b};}
};

126. 单词接龙 II

链接: 单词接龙
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这道题我知道是应该用递归和回溯,但是不知道如何动笔。官方是利用广度优先搜索 + 回溯,建立图。
本题要求的是最短转换序列,看到最短首先想到的就是广度优先搜索。但是本题没有给出显示的图结构,根据单词转换规则:把每个单词都抽象为一个顶点,如果两个单词可以只改变一个字母进行转换,那么说明它们之间有一条双向边。因此我们只需要把满足转换条件的点相连,就形成了一张图。根据示例 1 中的输入,我们可以建出下图:

在这里插入图片描述
基于该图,我们以 “hit"为图的起点, 以 “cog"为终点进行广度优先搜索,寻找 “hit"到 “cog"的最短路径。下图即为答案中的一条路径。
在这里插入图片描述
由于要求输出所有的最短路径,因此我们需要记录遍历路径,然后通过回溯得到所有的最短路径。

细节

  • 从一个单词出发,修改每一位字符,将它修改成为 ‘a’到 ‘z’中的所有字符,看看修改以后是不是在题目中给出的单词列表中;
  • 有一些边的关系,由于不是最短路径上的边,不可以被记录下来。为此,我们为扩展出的单词记录附加的属性:层数。即下面代码中的steps。如果当前的单词扩散出去得到的单词的层数在以前出现过,则不应该记录这样的边的关系。

代码:

class Solution {
public:vector<vector<string>> findLadders(string beginWord, string endWord, vector<string> &wordList) {vector<vector<string>> res;// 因为需要快速判断扩展出的单词是否在 wordList 里,因此需要将 wordList 存入哈希表,这里命名为「字典」unordered_set<string> dict = {wordList.begin(), wordList.end()};// 修改以后看一下,如果根本就不在 dict 里面,跳过if (dict.find(endWord) == dict.end()) {return res;}// 特殊用例处理dict.erase(beginWord);// 第 1 步:广度优先搜索建图// 记录扩展出的单词是在第几次扩展的时候得到的,key:单词,value:在广度优先搜索的第几层unordered_map<string, int> steps = {{beginWord, 0}};// 记录了单词是从哪些单词扩展而来,key:单词,value:单词列表,这些单词可以变换到 key ,它们是一对多关系unordered_map<string, set<string>> from = {{beginWord, {}}};int step = 0;bool found = false;queue<string> q = queue<string>{{beginWord}};int wordLen = beginWord.length();while (!q.empty()) {step++;int size = q.size();for (int i = 0; i < size; i++) {const string currWord = move(q.front());string nextWord = currWord;q.pop();// 将每一位替换成 26 个小写英文字母for (int j = 0; j < wordLen; ++j) {const char origin = nextWord[j];for (char c = 'a'; c <= 'z'; ++c) {nextWord[j] = c;if (steps[nextWord] == step) {from[nextWord].insert(currWord);}if (dict.find(nextWord) == dict.end()) {continue;}// 如果从一个单词扩展出来的单词以前遍历过,距离一定更远,为了避免搜索到已经遍历到,且距离更远的单词,需要将它从 dict 中删除dict.erase(nextWord);// 这一层扩展出的单词进入队列q.push(nextWord);// 记录 nextWord 从 currWord 而来from[nextWord].insert(currWord);// 记录 nextWord 的 stepsteps[nextWord] = step;if (nextWord == endWord) {found = true;}}nextWord[j] = origin;}}if (found) {break;}}// 第 2 步:回溯找到所有解,从 endWord 恢复到 beginWord ,所以每次尝试操作 path 列表的头部if (found) {vector<string> Path = {endWord};backtrack(res, endWord, from, Path);}return res;}void backtrack(vector<vector<string>> &res, const string &Node, unordered_map<string, set<string>> &from,vector<string> &path) {if (from[Node].empty()) {res.push_back({path.rbegin(), path.rend()});return;}for (const string &Parent: from[Node]) {path.push_back(Parent);backtrack(res, Parent, from, path);path.pop_back();}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/KipU/1280.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

adb-环境安装

1. 下载解压包&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1TDu2fzGbqCyug3wCSmV9oQ?pwd…

GZ036 区块链技术应用赛项赛题第9套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;9卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 随着异地务工人员的增多&#xff0c;房屋租赁成为一个广阔是市场&#xff1b;目前&#xff0c;现有技术中的房屋租赁是由…

【9-1】实验——Neo4j实战操作

目录 一、Neo4j操作——CQL 1、常用CQL命令 2.常用CQL函数 3.图数据的形式 二、实战代码1.create命令 2. MATCH命令 三、使用neo4j工具导入知识图谱 1、工具&#xff1a;neo4j-admin 2、图谱导入&#xff1a; 3、更新图谱&#xff1a; 一、Neo4j操作——CQL 1、常用…

面试经典150题——螺旋矩阵

"The harder the conflict, the more glorious the triumph." - Thomas Paine 1. 题目描述 2. 题目分析与解析 2.1 思路一 看到题目&#xff0c;先仔细观察矩阵&#xff0c;题目要求我们给出顺时针遍历的结果即可&#xff0c;我们根据矩阵可以看出&#xff0c;首…

微信小程序独立分包与分包预下载

官网链接 独立分包配置方法 独立分包使用限制 独立分包中不能依赖主包和其他分包中的内容&#xff0c;包括 js 文件、模板、wxss、自定义组件等&#xff1b;App 只能在主包内定义&#xff0c;独立分包中不能定义 App&#xff0c;会造成无法预期的行为独立分包中暂时不支持使用…

外包干了一个月,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

【Linux】主机搭建 Linux服务器环境 笔记

目录 前言选择系统软件1. 用U盘装系统2. 安装 Centos7.93. 网络套件 应用软件1. ngnix2. 防火墙配置3. nodejs 后记 前言 过年买了个 mini 主机当玩具玩一下&#xff0c;这里记录下。 选择 已有主力机 (windows) 的情况下&#xff0c;使用过如下四种 Linux宿主环境。这里总…

【ACM独立出版|武汉】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09;将于2024年3月22-24日在中…

主流开发语言和开发环境介绍

主流开发语言和开发环境介绍文章目录 ⭐️ 主流开发语言&#xff1a;2024年2月编程语言排行榜&#xff08;TIOBE前十&#xff09;⭐️ 主流开发语言开发环境介绍1.Python2.C3.C4.Java5.C#6.JavaScript7.SQL8.GO9.Visual Basic10.PHP ⭐️ 主流开发语言&#xff1a;2024年2月编程…

Maven setting.xml 配置

目的&#xff1a;可以把我们书写的jar包发布到maven私有仓库&#xff0c;简称私仓 1. 打开云效 2.点击 非生产库-snapshot mave release仓库与snapshot仓库区别&#xff1f; 在软件开发中&#xff0c;"Maven release 仓库"和"Maven snapshot 仓库"是两种…

Paddlepaddle使用自己的VOC数据集训练目标检测(0废话简易教程)

一 安装paddlepaddle和paddledection&#xff08;略&#xff09; 笔者使用的是自己的数据集 二 在dataset目录下新建自己的数据集文件&#xff0c;如下&#xff1a; 其中 xml文件内容如下&#xff1a; 另外新建一个createList.py文件&#xff1a; # -- coding: UTF-8 -- imp…

C++:const关键字

一、const成员变量(常成员变量) 1、只能使用初始化列表对常成员变量进行初始化&#xff1b; 2、常成员变量可以被访问&#xff0c;但是不能被修改&#xff1b; 3、类中所有构造函数都必须在初始化列表对常成员函数进行初始化(包括拷贝构造&#xff0c;移动构造)。 声明&am…

【数据结构】每天五分钟,快速入门数据结构(二)——链表

目录 一 构建一个单向链表 二 特点 三 时间复杂度 四 相关算法 1.判断链表是否成环及成环位置 2.链表反转 五 Java中的LinkedList 类 1.使用 2.LinkedList 方法 一 构建一个单向链表 // 设计链表结构class ListNode {int val;ListNode next;ListNode(){}ListNode(int…

《Solidity 简易速速上手小册》第1章:Solidity 和智能合约简介(2024 最新版)

文章目录 1.1 Solidity 的起源和重要性1.1.1 基础知识解析1.1.2 重点案例&#xff1a;去中心化金融 (DeFi) 平台案例 Demo&#xff1a;简易借贷平台 1.1.3 拓展案例 1&#xff1a;NFT 市场案例 Demo&#xff1a;简易 NFT 市场 1.1.4 拓展案例 2&#xff1a;智能合约管理的投票系…

vscode 无法远程连接waiting the server log

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 使用vscode软件&#xff0c;远程连接曙光&#xff0c;一段时间没连接&#xff0c;再次连接发现使用vscode连接不上&#xff0c;但是网页版可以正常连接。 问题解决&#xff1a; vscode版本不能>1.…

2024PMP备考-高质量PMP真题和很详细解析(3)

本专题&#xff0c;华研荟专门为大家讲解最近两年在中国大陆、香港、澳门地区的PMP考试真题&#xff0c;并且提供比较详细的解析&#xff0c;让大家知其然&#xff0c;还知其所以然。帮助大家最后20天有效冲刺&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-近年…

基于协同过滤的时尚穿搭推荐系统

项目&#xff1a;基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…

【安卓基础2】简单控件

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职。 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &#xff08;他们的视频后面一部分没再更新&#xff0c;看看前面…

祖龙娱乐 x Incredibuild

关于祖龙娱乐 祖龙娱乐有限公司&#xff08;下文简称“祖龙娱乐”&#xff09;是一家总部位于北京的移动游戏开发公司&#xff0c;成立于 2014 年&#xff0c;拥有成功的大型多人在线角色扮演游戏移动游戏组合&#xff0c;如《六龙争霸》、《梦幻诛仙》和《万王之王 3D》。公司…

小程序域名可以使用免费的SSL证书吗?

对于小程序域名而言&#xff0c;选择何种类型的SSL证书主要取决于小程序域名的具体情况。如果小程序域名是单独的域名&#xff0c;那么可以选择最为常见的免费单域名证书&#xff1b;如果小程序是公司主域名的子域名&#xff0c;则可以选择免费的通配符证书&#xff0c;一张证书…
推荐文章