leetcode
侯孟禹
这个作者很懒,什么都没留下…
展开
-
力扣-图论问题总结
力扣题目记录原创 2024-04-07 23:16:41 · 265 阅读 · 0 评论 -
力扣-回溯问题总结
【代码】回溯题-原创 2024-03-18 17:18:19 · 152 阅读 · 0 评论 -
力扣-其他问题
男生自用原创 2024-03-12 21:25:12 · 150 阅读 · 0 评论 -
力扣-数组/字符串/链表
记录,用于复习原创 2024-03-07 17:05:21 · 258 阅读 · 0 评论 -
leetcode-简单
记录原创 2024-03-02 18:09:37 · 331 阅读 · 0 评论 -
力扣-动态规划问题总结
动态规划-自用原创 2024-02-23 18:07:16 · 1105 阅读 · 0 评论 -
贪心算法-
贪心的本质是选择每一阶段的局部最优,从而达到全局最优原创 2023-09-24 18:29:28 · 1387 阅读 · 2 评论 -
455. 分发饼干
大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。可以尝试使用贪心策略,先将饼干数组和小孩数组排序。为了满足更多的小孩,就不要造成饼干尺寸的浪费。原创 2023-09-24 10:57:03 · 135 阅读 · 0 评论 -
47. 全排列 II
与上一题区别是序列里有重复的数字。竖向传参去重,横向用函数内set去重。原创 2023-09-22 10:46:28 · 454 阅读 · 0 评论 -
46. 全排列
1.使用used数组标记用过的,这个used是竖向的,之前的是横向的。因为是竖向,所以需要传参进去并且回溯。横向的不需要传参进去,作用域只在当前(一层for)函数里。2.不需要index,因为横向需要重复选取。for循环里i都从0开始。原创 2023-09-21 16:12:14 · 76 阅读 · 0 评论 -
491. 递增子序列
看到这个结果想到:1.首先把排序去掉(根据上一篇预测会出现重复) 2.加上长度判断 3.加上是否递增判断。注意的点:1.是在原有的序列里找递增的子序列。区别在于push进result的时候判断了长度。for里判断条件处理不好。原创 2023-09-21 15:30:06 · 43 阅读 · 0 评论 -
90. 子集 II
重点:1.横向去重,即[12223]当横向遍历到后面两个2的时候就跳过。2.需要先排序(暂时理解不了为啥要排序)方法:随想录提供两种方法:1使用used数组 2.用set。个人喜欢用set,容易理解。没排序会输出这样的结果。原创 2023-09-21 14:11:24 · 442 阅读 · 0 评论 -
78. 子集
求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合,排列问题我们后续的文章就会讲到的。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,有同学问了,什么时候for可以从0开始呢?原创 2023-09-21 12:29:30 · 268 阅读 · 0 评论 -
93. 复原 IP 地址
停止条件不知道怎么判断:模仿分割回文串,单独写个函数判断字符是否是合法的。合法条件:1不以0开头 2小于255。无法运行,报没有insert函数不知道为什么。分割点就是index。原创 2023-09-21 11:46:35 · 65 阅读 · 0 评论 -
131. 分割回文串
这种题目,想用for循环暴力解法,可能都不那么容易写出来,所以要换一种暴力的方式,就是回溯。一些同学可能想不清楚 回溯究竟是如何切割字符串呢?相信这里不同的切割方式可以搞懵很多同学了。我们来分析一下切割,原创 2023-09-20 00:04:11 · 479 阅读 · 0 评论 -
40. 组合总和 II
【代码】40. 组合总和 II。原创 2023-09-19 23:14:20 · 87 阅读 · 0 评论 -
39. 组合总和
区别在于可用重复选取,并且搜索树的深度k是不确定的,这就靠返回条件去约束各个分支树的深度。原创 2023-09-18 15:52:29 · 51 阅读 · 0 评论 -
17. 电话号码的字母组合
比如2,3就是需要选两个字母即搜索树的深度k=2。不同的是组合中是在同一组数中选,现在是在两个序列中分别选择。(这里不好用),还是用数组映射,因为这里的映射表是个静态的。发现循环次数不是固定的,也就是回溯解决的问题,还得用回溯。敲完总感觉哪里有问题,结果竟然一遍过了。原创 2023-09-18 14:58:44 · 528 阅读 · 0 评论 -
216. 组合总和 III
【代码】216. 组合总和 III。原创 2023-09-18 14:03:06 · 42 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点。第五步:切割后序数组,切成后序左数组和后序右数组。第一步:如果数组大小为零的话,说明是空节点了。第六步:递归处理左区间和右区间。原创 2023-09-12 22:45:40 · 725 阅读 · 0 评论 -
112. 路径总和
【代码】112. 路径总和。原创 2023-09-12 21:57:34 · 64 阅读 · 0 评论 -
513. 找树左下角的值
万金油层次遍历,保存每一层的第一个元素返回就行了。原创 2023-09-12 21:30:50 · 60 阅读 · 0 评论 -
77. 组合
看完题解手码一遍,先记录一下;原创 2023-09-08 23:24:56 · 551 阅读 · 0 评论 -
404. 左叶子之和
遍历节点,当前节点cur有左节点,并且左节点是叶子节点,则把他加上。原创 2023-09-08 15:32:47 · 820 阅读 · 0 评论 -
257. 二叉树的所有路径
层次遍历不好解,可用找到叶子节点,但是他有一个回溯过程,他要一直保留路径节点,层次迭代不好加回溯。1.返回值无,入参多一个单个叶子节点的路径string和总共路径集合。原创 2023-09-08 14:57:29 · 87 阅读 · 0 评论 -
110. 平衡二叉树
【代码】110. 平衡二叉树。原创 2023-09-08 13:45:58 · 110 阅读 · 0 评论 -
二叉树个人总结
2.退出一个递归后会把入参回溯。1.没有返回值,多一个入参。2、递归经常伴随回溯。原创 2023-09-08 13:20:00 · 24 阅读 · 0 评论 -
222. 完全二叉树的节点个数
对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。万金油--层次遍历法。原创 2023-09-07 23:39:12 · 957 阅读 · 0 评论 -
111. 二叉树的最小深度
递归肯定能做,但是我第一想法是层序遍历,层序遍历兼职万金油。层序遍历,遇到节点的左右都空就表示最小了。原创 2023-09-07 19:30:16 · 110 阅读 · 0 评论 -
104.二叉树的最大深度
个人感觉还是递归的套路,只是返回值放到参数里,这个时候就要注意向左右传depth的值都只是+1过的。因为层序遍历我们是知道有多少层的,每一层count++就可以知道最大深度。先序理解不了,看一下随想录思路。敲一下代码复习一遍层序遍历。原创 2023-09-07 19:00:06 · 70 阅读 · 0 评论 -
101. 对称二叉树
写了半天发现方法二不成立,上图不是对称,方法一才是对的。1.堆成二叉树中序遍历是个回文串。2.层次遍历,每一层都是回文串。原创 2023-09-06 23:28:13 · 999 阅读 · 0 评论 -
226. 翻转二叉树
遍历节点,将遇到的节点左右互换。个人比较喜欢用层次遍历,感觉层次遍历更容易理解。原创 2023-09-06 22:42:15 · 82 阅读 · 0 评论 -
二叉树层序遍历
在每次出对前判断长度s,接下来以s长度出队做一个序列(中途还是会有元素入队,但是s是固定的,即一层的元素数)写了个基础版,但是不符合题目要求,需要再加工一下。原创 2023-09-06 18:47:37 · 53 阅读 · 0 评论 -
二叉树的迭代遍历
关键点:一直入栈找到最左下角元素,否则出栈并将出栈元素的右入栈。关键点:前序遍历的入栈顺序改为左右,最后序列翻转。关键点:入栈顺序是先入右再入左。原创 2023-09-06 18:13:31 · 946 阅读 · 0 评论 -
239. 滑动窗口最大值
这里有一个关键点:如果最大的5再中间,则随窗口移动,次最大一定实在5右边,左边的都不用管,只对5及右边的进行单调入队,即遇到1先入队,但是遇到4,因为1max则替换,nums[left]==max就删除;题目刚开始看很简单,做起来就发现会遇到各种问题。原创 2023-09-03 11:38:54 · 905 阅读 · 0 评论 -
150. 逆波兰表达式求值
1,数字有正负,有高位,需要把token转换为正确的int数值。可以写一个函数,当token的长度大于1时则为数字,进行转换并返回int。2,stack设置为int,因为符号是不需要入栈的,只有数字需要入栈。遇到数字就入栈,遇到符号则出栈两个数并计算。原创 2023-09-01 14:53:14 · 19 阅读 · 0 评论 -
1047. 删除字符串中的所有相邻重复项
依次入栈,当栈不空且栈顶元素和将要入栈的元素相同,则出栈并且这个元素不入栈。原创 2023-08-31 12:55:18 · 26 阅读 · 0 评论 -
20. 有效的括号
主要思想:遇到左括号就进栈,遇到右括号就出栈并对比是否与当前的右括号匹配。额外加上特殊情况的处理,例如s[i]是右括号,字符数为奇数,一定是不符合的。还有栈空的情况进行处理。毫无疑问是用栈去处理这个问题。相同的问题例如前后缀的转换,计算公式是否合理都是使用栈去处理的。技巧:当有需要的匹配的需求时,考虑使用map可以简化操作。原创 2023-08-31 12:04:47 · 22 阅读 · 0 评论 -
225. 用队列实现栈
唯一需要操作的就是pop()方法,这里把que1出队并入进que2,直到que1剩一个元素,这个元素就是我们要pop()的,最后再把que2元素返回到que1中。可以看到其实queue可以返回尾元素,但是不能删尾元素。std::queue有如下几个方法。原创 2023-08-31 00:42:44 · 22 阅读 · 0 评论 -
232. 用栈实现队列
pop:如果stack2不空,是stack2出栈;否则,stack1依次出栈并压进stack2。push:stack1进栈。原创 2023-08-30 23:48:41 · 22 阅读 · 0 评论