LeetCode
Aelousdp
双非在读
展开
-
LeetCode 841.钥匙和房间 - C++ - 小结
钥匙和房间有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j]由[0,1,…,N-1]中的一个整数表示,其中 N=rooms.length。钥匙 rooms[i][j]=v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 true,否则返回原创 2020-08-07 09:54:02 · 423 阅读 · 0 评论 -
LeetCode 542.01 矩阵 - C++ - 小结
01 矩阵给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离两个相邻元素间的距离为 1示例:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000给定矩阵中至少有一个元素是 0矩阵中的元素只在四个方向上相邻:上、下、左、右。个人理解:应该挺好理解的,要得到的是最近距离,所有元素,那就广度优先搜索呗。弄一原创 2020-08-07 09:53:11 · 418 阅读 · 0 评论 -
LeetCode 733.图像渲染 - C++ - 小结
图像渲染有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr,sc)表示图像渲染开始的像素值(行,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染后的图原创 2020-08-07 09:51:42 · 278 阅读 · 0 评论 -
LeetCode 394.字符串解码 - C++ - 小结
字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k,例如不会出现像 3a 或 2[4]的输入。示例:输入:s = "3[a]2[bc]"输出:"aaabcbc"输入:s = "3[a2[原创 2020-08-07 09:50:43 · 342 阅读 · 0 评论 -
LeetCode 225.用队列实现栈 - C++ - 小结
用队列实现栈使用队列实现栈的下列操作:push(x): 元素 x 入栈pop(): 移除栈顶元素top(): 获取栈顶元素empty(): 返回栈是否为空注意:你只能使用队列的基本操作:也就是 push to back,peek/pop from front,size,和 is empty 这些操作是合法的你所使用的语言也许不支持队列。你可以使用 list 或者 deque(双端队列)来模拟一个队列,只要是标准的队列操作即可你可以假设所有操作都是有效的(例如,对一个空的栈不会调用 p原创 2020-08-07 09:49:27 · 178 阅读 · 0 评论 -
LeetCode 232.用栈实现队列 - C++ - 小结
使用栈实现队列的下列操作:push(x): 将一个元素放入队列的尾部pop(): 从队列首部移除元素peek(): 返回队列首部的元素empty(): 返回队列是否为空示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作:也就是只有 pu原创 2020-07-31 09:14:38 · 154 阅读 · 0 评论 -
LeetCode 94.二叉树的中序遍历 - C++ - 深度优先搜索(DFS)
给定一个二叉树,返回它的中序遍历。首先得知道什么是中序遍历:二叉树的遍历方式有前序,中序,后序,层序前序遍历:先访问根节点,然后左子树,然后右子树中序遍历:先访问左子树,然后根节点,然后右子树后序遍历:先访问左子树,然后右子树,然后根节点层序遍历:把一棵树从上到下,从左到右依次写出来接下来就好理解了,左根右,递归。代码如下(C++):class Solution {public: vector<int> ans; // 输出 vector<原创 2020-07-30 20:45:31 · 162 阅读 · 0 评论 -
LeetCode 494.目标和 - C++ - 深度优先搜索(DFS)
给定一个非负整数数组,a1,a2,…,an,和一个目标数 S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最终目标和为3。提示:数组非空,且原创 2020-07-30 20:43:51 · 263 阅读 · 0 评论 -
LeetCode 133.克隆图 - C++ - 深度优先搜索(DFS)
给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)图中的每个节点都包含它的值 val(int)和其邻居的列表(list[Node])class Node { public int val; public List<Node> neighbors;}说白了,看了半天没懂,大概意思就是说???拷贝一个图?参考了别人的代码,自己还是没理解。等再看看。感觉拿着 dfs 框架套上去就行了。代码如下(C++):class Solution {public: Node*原创 2020-07-30 20:33:03 · 212 阅读 · 0 评论 -
LeetCode 200.岛屿数量 - C++ - 深度优先搜索(DFS)
岛屿数量又来了,大多数情况下,能用 BFS 解决的问题,也能被 DFS 解决。问题具体见。岛屿问题代码如下(C++):class Solution { private: void dfs(vector<vector<char>> & grid,int r,int c){ // 深度优先算法,感觉就是个递归 int nr = grid.size(); // 岛屿大小 int nc = grid[0].size()原创 2020-07-30 20:30:58 · 319 阅读 · 0 评论 -
LeetCode - 栈和深度优先搜索
与 BFS 类似,深度优先搜索(DFS)也可用于查找从根结点道目标结点的路径。1.结点的处理顺序是什么?在下图中,从根结点 A 开始。首先选择结点 B 的路径,并进行回溯,直到到达结点 E,无法更进一步。然后回溯到 A 并选择第二条路径到结点 C。从 C 开始,我们尝试第一条路径到 E 但是 E 已被访问过。所以我们回到 C 并尝试从另一条路径到 F。最后找到 G。总的来说,在我们到达最深的结点之后,我们只会回溯并尝试另一条路径。因此我们在 DFS 中找到的第一条路径不一定就是最短的路径。例如原创 2020-07-30 20:29:23 · 184 阅读 · 0 评论 -
LeetCode 150.逆波兰表达式求值 - C++ - 注释
根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:["2","1","+","3","*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2+1)*3)=9代码如下(C++):class Solution {public: int ans; // 结果原创 2020-07-30 20:27:10 · 224 阅读 · 1 评论 -
LeetCode 739.每日温度 - C++ - 注释
请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures=[73,74,75,71,69,72,76,73],你的输出应该是[1,1,4,2,1,1,0,0]。提示:气温列表长度的范围是[1,30000]。每个气温的值的均为华氏度,都是在[30,100]范围内的整数。代码如下(C++):class Solution {public: vector&原创 2020-07-30 20:24:08 · 215 阅读 · 0 评论 -
LeetCode 20.有效的括号 - C++ -注释
这个题是我觉得比较简单的了。开心。给定一个只包括’(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。代码实现如下(C++):class Solution {public: bool isValid(string s) { stack<char> st; // 定义栈 for(auto x:s)原创 2020-07-30 20:21:46 · 180 阅读 · 0 评论 -
LeetCode 155.最小栈 - C++ - 辅助栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x):将元素 x 推入栈中。pop():删除栈顶的元素。top():获取栈顶元素。getMin():检索栈中的最小元素。官方思路如下方法一:使用辅助栈定义一个[数据栈]来支持 push、pop、top 操作定义一个[辅助栈]其栈顶为当前最小值,以支持常数时间复杂度的 getMin 操作代码如下(C++):class MinStack { stack<int> dataS原创 2020-07-30 20:19:57 · 191 阅读 · 0 评论 -
LeetCod 广度优先搜索(BFS)总结
看到 BFS 的题,脑子里知道怎么搞了,就是不知道从何入手。偶然看到了 labuladong 大神编写的 BFS 算法框架,摘过来,背就完事了。BFS 的核心思想应该不难理解的,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度比 DFS 大很多。// 计算从起点 start 到终点 target 的最近距离i原创 2020-07-21 09:52:01 · 291 阅读 · 0 评论 -
LeetCode 279.完全平方数 - C++ - 广度优先搜索(BFS)
完全平方数给定正整数 n,找到若干个完全平方数(比如 1,4,9,16…)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9代码如下(C++):class Solution {public: int numSquares(int n) { if(n <= 0){ // 如果输入值 小于 0 返回。 retu原创 2020-07-21 09:50:10 · 402 阅读 · 0 评论 -
LeetCode 752.打开转盘锁 - C++ - 广度优先搜索(BFS)
题目:打开转盘锁你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有 10 个数字:‘0’到’9’。每个拨轮可以自由旋转:例如把’9’变为’0’,‘0’变为’9’。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为’0000’,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的数字,你需要给出最小的旋转次数,如果无论如何不能解锁,返回-1。示例:输入:dead原创 2020-07-21 09:46:56 · 358 阅读 · 0 评论 -
LeetCode 200.岛屿数量 - C++ - 广度优先搜索(BFS)
岛屿数量给你一个由’1’(陆地)和’0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。使用广度优先搜索方式进行搜索思想:遍历所有的网格,遇到 1,我们就认为遇到了一个岛屿,然后对岛屿的其他范围进行搜索,通过广度优先,对相邻的每个元素进行遍历,如果遇到元素值为 1 的则加入队列。知道队列为空。我们要将遍历过的值归零。这样所有的都为 0 即结束。代码如下所示(C++):cla原创 2020-07-21 09:35:46 · 586 阅读 · 0 评论 -
LeetCode 622.设计循环队列(详细注释) - C++
队列-实现队列的实现方式其实很好理解,就是一个数组,我们通过指针对头部进行索引,就可以实现了。这种方法实现很简单,但是效率很低,因为数组的大小不是固定的,会随着指针的移动,占用的空间越来越大。改进队列循环队列:我们使用固定大小的数组,和两个指针来指示起始位置和结束位置,目的是重用我们之前被浪费掉的存储。设计循环队列要求我们设计的队列有如下功能:MyCircularQueue(k):构造器,设置队列长度为 kFront:从队首获取元素。如果队列为空,返回-1Rear:获取队尾元素。如果队列原创 2020-07-21 09:33:02 · 355 阅读 · 0 评论