![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录 一刷
Xjy xxxpy
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营第44天 | 动态规划part06:完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ。
力扣上没有纯粹的完全背包的题目,所以大家看本篇了解一下 完全背包的理论。后面的两道题目,都是完全背包的应用,做做感受一下。518. 零钱兑换 II。377. 组合总和 Ⅳ。原创 2023-07-20 00:20:48 · 113 阅读 · 0 评论 -
代码随想录算法训练营第43天 | 动态规划 part05:1049. 最后一块石头的重量 II、494. 目标和、474.一和零。
通过这道题目,大家先粗略了解, 01背包,完全背包,多重背包的区别,不过不用细扣,因为后面 对于 完全背包,多重背包 还有单独讲解。大家重点理解 递推公式:dp[j] += dp[j - nums[i]],这个公式后面的提问 我们还会用到。1049. 最后一块石头的重量 II。很像了,可以尝试先自己思考做一做。416. 分割等和子集。原创 2023-07-20 00:15:36 · 89 阅读 · 0 评论 -
代码随想录算法训练营第42天 | 01背包问题的两种解决方案(详解)、416.分割等和子集。
虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。如果做过背包类问题,可以先看视频,很多内容,是自己平时没有考虑到位的。如果是直接从来没听过背包问题,可以先看文字讲解慢慢了解 这是干什么的。背包问题,力扣上没有原题,大家先了解理论,今天就安排一道具体题目。01背包问题,你该了解这些!01背包问题,你该了解这些!416. 分割等和子集。本题是 01背包的应用类题目。416. 分割等和子集。原创 2023-07-17 23:55:38 · 51 阅读 · 0 评论 -
代码随想录算法训练营第41天 | LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树。
今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。96.不同的二叉搜索树。96.不同的二叉搜索树。原创 2023-07-17 23:50:14 · 126 阅读 · 0 评论 -
代码随想录算法训练营第39天 | LeetCode62. 不同路径、LeetCode63.不同路径II。
从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值;下标(0, j)的初始化情况同理;那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来;这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的;原创 2023-07-14 00:38:58 · 540 阅读 · 0 评论 -
代码随想录算法训练营第38天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。
很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。这道题目力扣改了题目描述了,现在的题目描述清晰很多,相当于明确说。本题大家先自己想一想, 之后会发现,746. 使用最小花费爬楼梯。509. 斐波那契数。和 斐波那契数 有点关系。原创 2023-07-14 00:35:22 · 89 阅读 · 0 评论 -
代码随想录算法训练营第37天 | 738.单调递增的数字、968.监控二叉树、总结。
可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。968.监控二叉树 (可以跳过)738.单调递增的数字。原创 2023-07-12 21:25:18 · 116 阅读 · 0 评论 -
代码随想录算法训练营第36天 | 435. 无重叠区间、763.划分字母区间、56. 合并区间。
今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙!做过了也就会了,没做过就很难想出来。56. 合并区间 --435. 无重叠区间。763.划分字母区间。本题相对来说就比较难了。原创 2023-07-12 21:17:55 · 82 阅读 · 0 评论 -
代码随想录算法训练营第35天 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球。
860.柠檬水找零本题看上好像挺难,其实挺简单的,大家先尝试自己做一做。406.根据身高重建队列本题有点难度,。原创 2023-07-11 07:59:22 · 31 阅读 · 0 评论 -
代码随想录算法训练营第34天 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果。
本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。本题有点难度,不太好想,推荐大家熟悉一下方法二。处理好一边再处理另一边,不要两边想着一起兼顾。1005.K次取反后最大化的数组和。,后面还会有题目用到这个思路。本题涉及到一个思想,就是想。原创 2023-07-10 22:35:11 · 85 阅读 · 0 评论 -
代码随想录算法训练营第32天 |122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II。
本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是。本题如果没接触过,很难想到,所以不要自己憋时间太久,读题思考一会,没思路立刻看题解!122.买卖股票的最佳时机II。原创 2023-07-08 11:21:19 · 118 阅读 · 0 评论 -
代码随想录算法训练营第31天 | 贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和 。
基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。,所以大家了解贪心算法 就了解它没有规律的本质就够了。学完贪心之后再去看动态规划,就会了解贪心和动规的区别。不用花心思去研究其规律, 没有思路就立刻看题解。贪心算法其实就是没有什么规律可言。原创 2023-07-08 08:40:35 · 91 阅读 · 0 评论 -
代码随想录算法训练营第30天| 332.重新安排行程、51. N皇后 、37. 解数独。
332.重新安排行程(可跳过)51. N皇后(可跳过)37. 解数独(可跳过)今天这三道题都非常难!原创 2023-07-06 08:01:29 · 102 阅读 · 0 评论 -
代码随想录算法训练营第29天 | 491.递增子序列、46.全排列、47.全排列 II。
47.全排列 II本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。used[i - 1] == true 也行,used[i - 1] == false 也行。原创 2023-07-05 23:49:11 · 76 阅读 · 0 评论 -
代码随想录算法训练营第28天 | 93.复原IP地址、78.子集、90.子集II。
大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。子集问题,就是收集树形结构中,每一个节点的结果。整体代码其实和 回溯模板都是差不多的。本来是很有难度的,不过 大家做完。本质:上一题的一个拓展、延伸!的基础上加上了去重,去重我们在。子集问题、组合问题、分割问题。之后,本题就容易很多了。都抽象为一棵树的话,原创 2023-07-04 19:59:49 · 26 阅读 · 0 评论 -
代码随想录算法训练营第27天 | 39. 组合总和、40.组合总和II、131.分割回文串。
注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制。Note:若有0就会陷入死循环 --> 题干条件都是正整数。总结:切割问题/组合问题 都可以与回溯算法结合起来解题!大家先看视频来理解 分割问题,明天还会有一道。Conclusion:尽量做到方法触类旁通。原创 2023-07-03 07:51:31 · 101 阅读 · 0 评论 -
代码随想录算法训练营第25天 | 216.组合总和III、17.电话号码的字母组合。
本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。问题理解了,本题就容易一些了。17.电话号码的字母组合。216.组合总和III。1、也涉及到剪枝的问题。原创 2023-06-30 22:47:22 · 40 阅读 · 0 评论 -
代码随想录算法训练营第24天 | 回溯算法理论、77. 组合。
对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现。是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。在讲解二叉树的时候,就给大家介绍过回溯。原创 2023-06-30 22:41:30 · 145 阅读 · 0 评论 -
代码随想录算法训练营第23天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树。
669. 修剪二叉搜索树这道题目比较难,比和难的多,建议先看视频理解。题目链接/文章讲解:视频讲解:note:不能盲目删除,以小于min的节点为例,该被删小节点的右子树中的节点很可能会满足要求,因此会被误杀而导致不正确。当然本题也没有必要去重构!--> 还是“递归法”!108.将有序数组转换为二叉搜索树本题就简单一些,可以尝试先自己做做。本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。Ans:分割点就是数组中间位置的节点。Q:如果数组长度为偶数,中间节点有两个,取哪一个。原创 2023-06-29 06:56:38 · 40 阅读 · 1 评论 -
代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点。
235. 二叉搜索树的最近公共祖先相对于二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。那么本题是二叉搜索树,二叉搜索树是有序的,那得好好利用一下这个特点。在有序树里,如果判断一个节点的左子树里有p,右子树里有q呢?因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。那么。原创 2023-06-28 07:40:46 · 45 阅读 · 1 评论 -
代码随想录算法训练营第21天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先。
二叉树进行递归时,对于有没有返回值就是要看我们是不是要处理一整条边,需注意返回之后应该如何处理。另外对于需要从底向上进行操作的二叉树一般都是后序遍历,因为后序遍历存在着由底向上的回溯过程,这个回溯过程就可以看做从下到上的递归逻辑。原创 2023-06-27 08:14:17 · 52 阅读 · 1 评论 -
代码随想录算法训练营第20天 | 关于最大二叉树、关于合并二叉树、关于二叉搜索树中的搜索、关于验证二叉搜索树。
为什么pre放在外面而不是方法里面:因为放在外面才可以被递归的每一层访问到,里面的话就是局部变量,每一层都相互独立,就起不到一层的修改让另一层可见的作用了。pre变量的作用:这个就是记录二叉搜索树中当前节点的前一个用来比较的节点。,因为先构造中间节点,然后递归构造左子树和右子树。Note:前序、中序、后序都是ok的!大多数题都是用递归是最直观简单好写的。中序遍历搞定一切问题!原创 2023-06-26 07:27:31 · 50 阅读 · 1 评论 -
代码随想录算法训练营第18天 | 513.找树左下角的值、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树。
之前我们讲的二叉树题目都是各种遍历二叉树,这次开始构造二叉树了,思路其实比较简单,但是真正代码实现出来并不容易。所以要避免眼高手低,踏实地把代码写出来。我同时给出了添加日志的代码版本,因为这种题目是不太容易写出来调一调就能过的,所以一定要把流程日志打出来,看看符不符合自己的思路。大家遇到这种题目的时候,也要学会打日志来调试(如何打日志有时候也是个技术活),不要脑动模拟,脑动模拟很容易越想越乱。最后我还给出了。原创 2023-06-24 11:36:09 · 51 阅读 · 1 评论 -
代码随想录算法训练营第17天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和。
判断是不是左叶子得根据父节点。原创 2023-06-23 08:22:24 · 48 阅读 · 1 评论 -
代码随想录算法训练营第16天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数。
完全二叉树会因为其独有的性质使得求节点数更容易,但是首先我们得判断正确,到底是不是 完全二叉树!,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。有时候,精简的代码并不能很好的反映出数据结构的原理。需要了解,普通二叉树 怎么求,完全二叉树又怎么求?222.完全二叉树的节点个数(优先掌握递归)111.二叉树的最小深度 (优先掌握递归)先看视频讲解,和最大深度 看似差不多,其实。note:此题并没有求“最大深度”那么直观!104.二叉树的最大深度 (优先掌握递归)分成:普通二叉树和完全二叉树。原创 2023-06-22 09:17:41 · 42 阅读 · 1 评论 -
代码随想录算法训练营第15天 | 树的层序遍历及其应用
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构即。队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。原创 2023-06-21 07:57:09 · 34 阅读 · 0 评论 -
代码随想录算法训练营第14天 | 递归遍历、迭代遍历、统一迭代。[二叉树part01]
需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义。统一迭代 (基础不好的录友,迭代法可以放过)这是统一迭代法的写法, 如果学有余力,可以掌握一下。二叉树的三种递归遍历掌握其规律后,其实很简单!迭代遍历 (基础不好的录友,迭代法可以放过)区别好:前序、中序、后序。递归遍历 (必须掌握)原创 2023-06-20 07:17:45 · 119 阅读 · 0 评论 -
代码随想录算法训练营第13天 | 239. 滑动窗口最大值、347.前 K 个高频元素。
在栈与队列系列中,我们强调栈与队列的基础,也是很多同学容易忽视的点。使用抽象程度越高的语言,越容易忽视其底层实现,而C++相对来说是比较接近底层的语言。我们用栈实现队列,用队列实现栈来掌握的栈与队列的基本操作。接着,通过括号匹配问题、字符串去重问题、逆波兰表达式问题来系统讲解了栈在系统中的应用,以及使用技巧。通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。原创 2023-06-19 08:21:15 · 25 阅读 · 0 评论 -
代码随想录算法训练营第11天 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值。
流程:遇到数字就push进stack中,遇到字符串就弹出stack顶最上面的2个数字并做相应的“+”、“-”、“*”、"%"。然后把结果再次push进stack中。注意,本题还有类似“剪枝预处理”的操作:如果字符串长度为奇数,那必然存在不匹配的括号!遍历数组当前元素时候,前一个元素是什么。本题不难,但第一次做的话,会很难想到。逆波兰表达式&实质:二叉树的后序遍历。,所以先看视频,了解思路再去做题。”的操作,因为栈帮助我们记录了。code:①使用stack。思考:有哪些不匹配的场景?接下来是栈的经典应用!原创 2023-06-17 08:27:08 · 38 阅读 · 1 评论 -
代码随想录算法训练营day10 | 232.用栈实现队列、225. 用队列实现栈。
把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。但是依然还是要用两个队列来模拟栈,只不过没有输入和输出的关系,而是另一个队列完全用来备份的!同学可能依然想着用一个输入队列,一个输出队列,就可以模拟栈的功能,仔细想一下还真不行!所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。,那么我们先说一说两个队列来实现栈的思路。232.用栈实现队列。原创 2023-06-16 12:13:38 · 44 阅读 · 1 评论 -
代码随想录算法训练营第9天 | 28. 实现 strStr()、459.重复的子字符串。
本文中一共介绍了leetcode上九道使用双指针解决问题的经典题目,除了链表一些题目一定要使用双指针,其他题目都是使用双指针来提高效率,一般是将O(n^2)的时间复杂度,降为O(n)。原创 2023-06-15 08:04:50 · 35 阅读 · 1 评论 -
代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
首先可以使用暴力解:两个for loop,然后不断寻找符合条件的子序列,时间复杂度:O(n^2)。: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。result,和A数组一样的大小,让k指向result数组终止位置。易错:必须遵循原则——左闭右开(the same 循环不变量)解法:暴力(nums.sort()即可) or。考虑双指针法:i指向起始位置,j指向终止位置。209.长度最小的子数组。原创 2023-06-13 00:02:42 · 49 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
本题在LeetCode上写了左闭右开和左闭右闭两个版本,感觉稍不注意就容易出问题。First,我们尝试暴力解,基本没有什么问题(Python语法熟练度以及边界位置处理仍需注意)都不算难,但是得加强对“缩进”的理解(总是对齐不对位置sos)1.left和right的initialization。易错:while后面的条件 以及 带不带等号。3.left、right边界的update。本题有2种常见方法:暴力解法&双指针法。2.while后面接的部分。原创 2023-06-12 23:36:51 · 48 阅读 · 1 评论