算法刷题
文章平均质量分 55
Dead Woods
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营第四十二天| 01背包问题,你该了解这些! 01背包问题,你该了解这些! 滚动数组 416. 分割等和子集
正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。如果做过背包类问题,可以先看视频,很多内容,是自己平时没有考虑到位的。如果是直接从来没听过背包问题,可以先看文字讲解慢慢了解 这是干什么的。背包问题,力扣上没有原题,大家先了解理论,今天就安排一道具体题目。416. 分割等和子集。本题是 01背包的应用类题目。原创 2023-09-24 15:41:32 · 247 阅读 · 0 评论 -
代码随想录算法训练营第四十一天| 343. 整数拆分 96.不同的二叉搜索树
今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。343. 整数拆分那么在取最大值的时候,为什么还要比较dp[i]呢?因为在递推公式推导的过程中,每次计算dp[i],取最大的而已。原创 2023-09-18 12:54:45 · 290 阅读 · 0 评论 -
代码随想录算法训练营第三十九天| 62.不同路径 63. 不同路径 II
今天开始逐渐有 dp的感觉了,题目不多,就两个 不同路径,可以好好研究一下。本题大家掌握动态规划的方法就可以。数论方法 有点非主流,很难想到。63. 不同路径 II。原创 2023-09-18 10:29:55 · 284 阅读 · 0 评论 -
代码随想录算法训练营第三十八天|理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
理论基础无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了?其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!如果做过动态规划题目的录友,看我的理论基础 就会感同身受了。509. 斐波那契数很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。70. 爬楼梯本题大家先自己想一想, 之后会发现,和 斐波那契数 有点关系。原创 2023-09-18 09:32:06 · 293 阅读 · 0 评论 -
代码随想录算法训练营第三十七天|738.单调递增的数字 968.监控二叉树 总结
738.单调递增的数字例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。原创 2023-09-17 22:23:58 · 395 阅读 · 0 评论 -
代码随想录算法训练营第三十六天| 435. 无重叠区间 763.划分字母区间 56. 合并区间
即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑,本题是判断区间重贴后要进行区间合并。还是属于那种,做过了也就会了,没做过就很难想出来。大家如果认真做题的话,话发现和我们刚刚讲过的。原创 2023-09-17 19:43:17 · 309 阅读 · 0 评论 -
代码随想录算法训练营第三十五天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。本题有两个维度,h和k,看到这种题目一定要想如何确定一个维度,然后再按照另一个维度重新排列。我就强调过一次,遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。本题是一道 重叠区间的题目,好好做一做,因为明天三道题目,都是 重叠区间。本题有点难度,和分发糖果类似,不要两头兼顾,处理好一边再处理另一边。本题看上好像挺难,其实挺简单的,大家先尝试自己做一做。原创 2023-09-16 11:22:43 · 191 阅读 · 0 评论 -
代码随想录算法训练营第三十四天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大(例如正整数数组{5, 3, 1},反转1 得到-1 比 反转5得到的-5 大多了),全局最优:整个 数组和 达到最大。那么如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。局部最优可以推出全局最优。原创 2023-09-16 10:14:38 · 84 阅读 · 0 评论 -
24~29总结:组合、分割、子集、全排列
第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4],以此类推。求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合,排列问题我们后续的文章就会讲到的。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。可以看出这棵树,一开始集合是 1,2,3,4, 从左向右取数,取过的数,不再重复取。的整数数组 nums,返回该数组所有可能的子集(幂集)。原创 2023-09-15 13:55:21 · 143 阅读 · 0 评论 -
代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。本题如果没接触过,很难想到,所以不要自己憋时间太久,读题思考一会,没思路立刻看题解。本题解法很巧妙,大家可以看题思考一下,在看题解。122.买卖股票的最佳时机II。原创 2023-09-09 20:35:31 · 201 阅读 · 0 评论 -
代码随想录算法训练营第三十一天|理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。,所以大家了解贪心算法 就了解它没有规律的本质就够了。学完贪心之后再去看动态规划,就会了解贪心和动规的区别。不用花心思去研究其规律, 没有思路就立刻看题解。贪心算法其实就是没有什么规律可言。可以用dp,也可以用贪心。原创 2023-09-09 18:32:29 · 268 阅读 · 0 评论 -
代码随想录算法训练营第三十天| 332.重新安排行程 51. N皇后 37. 解数独
因为 一刷 也不求大家能把这么难的问题解决,所以 大家一刷的时候,就了解一下题目的要求,了解一下解题思路,不求能直接写出代码,先大概熟悉一下这些题,二刷的时候,随着对回溯算法的深入理解,再去解决如下三题。今天这三道题都非常难,那么这么难的题,为啥一天做三道?大家今天的任务,其实是 对回溯算法章节做一个总结就行。332.重新安排行程(可跳过)51. N皇后(可跳过)37. 解数独(可跳过)原创 2023-09-07 20:12:15 · 276 阅读 · 0 评论 -
代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II
本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。used[i - 1] == true 也行,used[i - 1] == false 也行。本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。为什么排列问题不用 startIndex。本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。原创 2023-09-07 18:47:35 · 213 阅读 · 0 评论 -
代码随想录算法训练营第二十八天| 93.复原IP地址 78.子集 90.子集II
大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。子集问题,就是收集树形结构中,每一个节点的结果。整体代码其实和 回溯模板都是差不多的。本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,原创 2023-09-05 16:17:15 · 176 阅读 · 0 评论 -
代码随想录算法训练营第二十七天| 131.分割回文串
本题较难,大家先看视频来理解 分割问题,明天还会有一道分割问题,先打打基础。原创 2023-09-05 09:55:13 · 492 阅读 · 0 评论 -
代码随想录算法训练营第二十五天|39. 组合总和 40. 组合总和 II 216.组合总和III 17.电话号码的字母组合
和另外两种组合一起看:分别是选取的数组有无重复,以及能否重复使用,在于start,去重读的区别。本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。如果把 组合问题理解了,本题就容易一些了。17.电话号码的字母组合。216.组合总和III。原创 2023-09-01 22:40:03 · 60 阅读 · 0 评论 -
代码随想录算法训练营第二十四天|理论基础 77. 组合
其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现 写回溯算法套路。在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。原创 2023-09-01 18:59:05 · 409 阅读 · 0 评论 -
代码随想录算法训练营第二十三天|669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 ● 总结篇
本题也不难,在 求二叉搜索树的最小绝对差 和 众数 那两道题目 都讲过了 双指针法,思路是一样的。这道题目比较难,比 添加增加和删除节点难的多,建议先看视频理解。递归: 左闭右开 [left,right)好了,二叉树大家就这样刷完了,做一个总结吧。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。本题就简单一些,可以尝试先自己做做。669. 修剪二叉搜索树。原创 2023-09-01 15:53:05 · 66 阅读 · 0 评论 -
代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
本题比想象中的简单,大家可以先自己想一想应该怎么做,然后看视频讲解,就发现 本题为什么比较简单了。相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。相对于 插入操作,本题就有难度了,涉及到改树的结构。235. 二叉搜索树的最近公共祖先。701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。原创 2023-09-01 14:42:47 · 56 阅读 · 0 评论 -
代码随想录算法训练营第二十一天| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
同时要学会在递归遍历的过程中如何记录前后两个指针,这也是一个小技巧,学会了还是很受用的。和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。需要领悟一下二叉树遍历上双指针操作,优先掌握递归。,我们只需要在中序遍历的时候和前一个节点比较,保存。本题其实是比较难的,可以先看我的视频讲解。可以先自己做做看,然后看我的视频讲解。530.二叉搜索树的最小绝对差。236. 二叉树的最近公共祖先。501.二叉搜索树中的众数。原创 2023-09-01 13:35:08 · 47 阅读 · 0 评论 -
代码随想录算法训练营day1~18总结
day1:day2:day3:day4:day6:day7: day8:day9:栈队day10:day11:day13:二叉树。原创 2023-08-30 18:46:43 · 172 阅读 · 0 评论 -
代码随想录算法训练营第二十天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历。这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。递归和迭代 都可以掌握以下,因为本题比较简单, 了解一下 二叉搜索树的特性。遇到 搜索树,一定想着中序遍历,这样才能利用上特性。700.二叉搜索树中的搜索。写了一版就是掉进陷阱的。原创 2023-08-29 00:32:53 · 50 阅读 · 0 评论 -
代码随想录算法训练营第十八天 | 513.找树左下角的值112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树 一起做,思路一样的。本题 又一次设计要回溯的过程,而且回溯的过程隐藏的还挺深,建议先看视频来理解。112. 路径总和,和 113. 路径总和ii 一起做了。本题递归偏难,反而迭代简单属于模板题, 两种方法掌握一下。本题算是比较难的二叉树题目了,大家先看视频来理解。从中序与后序遍历序列构造二叉树。原创 2023-08-26 21:14:06 · 111 阅读 · 0 评论 -
代码随想录算法训练营第十七天 | 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和
这是大家第一次接触到回溯的过程, 我在视频里重点讲解了 本题为什么要有回溯,已经。其实本题有点文字游戏,搞清楚什么是左叶子,剩下的就是二叉树的基本操作。再一次涉及到,什么是高度,什么是深度,可以巩固一下。257. 二叉树的所有路径 (优先掌握递归)如果对回溯 似懂非懂,没关系, 可以先有个印象。110.平衡二叉树 (优先掌握递归)404.左叶子之和 (优先掌握递归)原创 2023-08-25 13:28:09 · 52 阅读 · 0 评论 -
代码随想录算法训练营第十六天 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。需要了解,普通二叉树 怎么求,完全二叉树又怎么求。222.完全二叉树的节点个数(优先掌握递归)104.二叉树的最大深度 (优先掌握递归)111.二叉树的最小深度 (优先掌握递归)原创 2023-08-23 22:15:14 · 191 阅读 · 0 评论 -
代码随想录算法训练营第十五天 | 层序遍历 226.翻转二叉树 101.对称二叉树 2
这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。101. 对称二叉树 (优先掌握递归)226.翻转二叉树 (优先掌握递归)先看视频讲解,会更容易一些。原创 2023-08-23 21:35:32 · 157 阅读 · 0 评论 -
代码随想录算法训练营第十四天 | 理论基础 递归遍历 迭代遍历 统一迭代
需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义。统一迭代 (基础不好的录友,迭代法可以放过)这是统一迭代法的写法, 如果学有余力,可以掌握一下。二叉树的三种递归遍历掌握其规律后,其实很简单。迭代遍历 (基础不好的录友,迭代法可以放过)递归遍历 (必须掌握)原创 2023-08-22 15:40:42 · 147 阅读 · 1 评论 -
代码随想录算法训练营第三天|203.移除链表元素 707.设计链表 206.反转链表
链表理论基础建议:了解一下链接基础,以及链表和数组的区别文章链接:代码随想录链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。 java 初始化:public class ListNode { // 结点的值 int val; // 下一个结点 ListNode next; // 节点的构造函数(无参) public ListNode() { } //原创 2023-08-11 15:30:17 · 183 阅读 · 1 评论 -
代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。建议:对于线性数据结构,填充或者删除,后序处理会高效的多。建议:题解中的解法如果没接触过的话,应该会想不到。剑指Offer58-II.左旋转字符串。541. 反转字符串II。原创 2023-08-19 00:00:25 · 59 阅读 · 0 评论 -
代码随想录算法训练营第十三天 | 239. 滑动窗口最大值 347.前 K 个高频元素 总结
239. 滑动窗口最大值 (一刷至少需要理解思路之前讲的都是栈的应用,这次该是队列的应用了。本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。其他题解:遍历数组,将 数 存放在双向队列中,并用 L,R 来标记窗口的左边界和右边界。队列中保存的并不是真的 数,而是该数值对应的数组下标位置,并且数组中的数要从大到小排序。如果当前遍历的数比队尾的值大,则需要弹出队尾值,直到队列重新满足从大到小的要求。原创 2023-08-21 16:48:27 · 242 阅读 · 1 评论 -
代码随想录算法训练营第九天|28. 实现 strStr()459.重复的子字符串·字符串总结·双指针回顾
因为大家 算法能力还没到,细扣 很难的算法,会把自己绕进去,就算别人给解释,只会激发出更多的问题和疑惑。所以大家先了解大体过程,知道这么回事, 等自己有 算法基础和思维了,在看多看几遍视频,慢慢就理解了。因为KMP算法很难,大家别奢求 一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会 好懂很多。但是这样对于重复字符串很长的字符串,效率会非常低。KMP和本题,一刷的时候 ,可以适当放过,了解怎么回事就行,二刷的时候再来硬啃。原创 2023-08-21 11:03:34 · 79 阅读 · 1 评论 -
代码随想录算法训练营第十天|理论基础 232.用栈实现队列 225. 用队列实现栈
大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。了解一下 栈与队列的内部实现机智。,文中是以C++为例讲解的。225. 用队列实现栈。232.用栈实现队列。原创 2023-08-19 23:22:54 · 128 阅读 · 0 评论 -
代码随想录算法训练营第十一天|20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值
要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题。讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。1047. 删除字符串中的所有相邻重复项。150. 逆波兰表达式求值。原创 2023-08-20 13:00:37 · 70 阅读 · 1 评论 -
代码随想录算法训练营第七天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
建议: 要比较一下,本题和 454.四数相加II 的区别,为什么 454.四数相加II 会简单很多,这个想明白了,对本题理解就深刻了。建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效率,降低时间复杂度,当然使用哈希法 会提高空间复杂度,但一般来说我们都是舍空间 换时间, 工业开发也是这样。建议:本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。454.四数相加II。原创 2023-08-16 23:25:27 · 89 阅读 · 1 评论 -
代码随想录算法训练营第六天|哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数1. 两数之和
建议:本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0原创 2023-08-16 17:08:25 · 176 阅读 · 1 评论 -
代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 02.07. 链表相交 142.环形链表II
双指针的操作,要注意,删除第N个节点,那么我们当前遍历的指针一定要指向 第N个节点的前一个节点,建议先看视频。本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。思路:没有思路,但是在leetcode上看到一个比较有意思的题解,参考代码随想录的思想再自己写一遍。算是链表比较有难度的题目,需要多花点时间理解 确定环和找环入口,建议先看视频。思想:一开始逻辑不对,没有设置好循环,根据文章的步骤一二三写的简洁版。142.环形链表II。思路:太牛了,记住结论。原创 2023-08-11 23:58:31 · 74 阅读 · 1 评论 -
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
977.有序数组的平方题目建议: 本题关键在于理解双指针思想视频讲解:思考:数组是固定的,不仅可以从小开始,还可以从大开始。209.长度最小的子数组题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。拓展题目可以先不做。思路:没有思路,怎么想都太麻烦。代码自己写:明白这个是符合条件的子数组遍历,然后取出最小的。拓展:哈希+滑动窗口。原创 2023-08-10 15:33:38 · 198 阅读 · 1 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
34.在排序数组中查找元素的第一个和最后一个位置力扣链接int i =0;i = mid+1;j = mid-1;//从中间向两边扩展while( l-1 >= 0 && nums[l--]==target ){//数组限制,防止溢出if(nums[l]!break;if(nums[r]!break;//数组创建方式时间复杂度:O(log n)空间复杂度:O(1)原创 2023-08-09 22:19:42 · 456 阅读 · 0 评论