自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 代码随想录算法训练营第四十一天|343. 整数拆分、96.不同的二叉搜索树

可以大致模拟这个过程。某些时候第一种方式得到的结果比第二种小,某些时候比第二种大,而我们要取的一直是最大值。同时这两种方法得到的结果还要与。本身存储着上一轮j得到的结果。4. 确定遍历顺序 - 从前向后。3. dp数组如何初始化。5. 举例推导dp数组。

2024-05-03 17:14:15 420 1

原创 代码随想录算法训练营第三十九天|62.不同路径、63. 不同路径 II

表示走到第i行第j列有几条路径。表示走到第i行第j列有几条路径。- 第一行和第一列均为1。- i, j 都从小到大。- i, j 都从小到大。

2024-04-23 14:19:22 305

原创 代码随想录算法训练营第三十八天|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划,英文:Dynamic Programming,简称DP。动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。

2024-04-22 19:47:47 441

原创 代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

今天三道题没看解析都做出来了,很开心~

2024-04-18 17:55:28 358

原创 代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

可以思考一下,10可以用2个5解决,但是5没办法用10分出来,因此5具有更高的灵活性,需要放在最后使用,也就是当没法给出10的时候使用。情况二:当前气球与上一个气球有重叠,需要判断当前气球跟再之前的气球是否重叠,这时候就需要引入一个变量min_right,去记录重叠部分气球的。💡先对people中的数组,按数组的第一个元素大小逆序排序(大到小),按第二个元素大小顺序排序(小到大),这样子从前往后遍历。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。情况一:账单是5,直接收下。

2024-04-11 18:27:22 558

原创 代码随想录算法训练营第三十四天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

如果 curSum<0 说明 区间和1 + 区间和2 < 0, 那么 假设从上图中的位置开始计数curSum不会小于0的话,就是 区间和2>0。区间和1 + 区间和2 < 0 同时 区间和2>0,只能说明区间和1 < 0, 那么就会从假设的箭头初就开始从新选择其实位置了。那么为什么一旦[0,i] 区间和为负数,起始位置就可以是i+1呢,i+1后面就不会出现更大的负数?存储在当前加油站加完油,减去开到下一加油站消耗的油后,所剩余的油量。如果出现更大的负数,就是更新i,那么起始位置又变成新的i+1了。

2024-04-10 16:08:05 845

原创 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

拿[1, 5, 10]举例,在第一天买入并在第三天卖出,利润为9,这种买卖方式与在第一天买入,第二天卖出并买入,在第三天卖出的利润是一样的。不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。💡贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。

2024-03-30 16:18:39 305

原创 代码随想录算法训练营第三十一天|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

其实并不会,因为还有一个变量 result 一直在更新 最大的连续和,只要有更大的连续和出现,result 就更新了,那么 result 已经把 4 更新了,后面 连续和变成 3,也不会对最后结果有影响。做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。大家在使用贪心算法求解本题,经常陷入的误区,就是分不清,是遇到 负数就选择起始位置,还是连续和为负选择起始位置。在动画演示用,大家可以发现, 4,遇到 -1 的时候,我们依然累加了,为什么呢?了,因为已经变为负数的。

2024-03-28 17:23:13 400

原创 代码随想录算法训练营第三十天| 回溯算法总结

都知道组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一树枝上“使用过”,一个维度是同一树层上“使用过”。没有理解这两个层面上的“使用过”是造成大家没有彻底理解去重的根本原因。used[i - 1] == false,说明同一树层candidates[i - 1]使用过。used[i - 1] == true,说明同一树枝candidates[i - 1]使用过。为了讲解这个去重问题,Carl自创了两个词汇,“树枝去重”和“树层去重”。

2024-03-26 17:10:28 204

原创 代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II

通过这道题的学习,我学会一个很重要的知识点:在一个递归函数中引入一个数组used,当进入到下一层递归中,上一层递归中的used与下一层的used是无关联的。虽然这些列表具有相同的名称 used,但它们在内存中是不同的对象,因此每个递归调用中的 used 列表占用的是不同的内存空间。如果有重复元素的话,就只能用一个与nums长度相同的数组去记录每一个index的元素是否使用过,这种方式会更加精准且普适。首先判断当前元素是否在used中出现过(因为每一个元素都是唯一的),出现过就跳过,实现树枝去重。

2024-03-26 16:33:15 939

原创 代码随想录算法训练营第二十八天|93.复原IP地址、78.子集、90.子集II

可以想象一下,如果在树层上有相同的元素出现,那么后遇到的那个元素包含的所有结果集合,都是先遇到元素的子集。所以遍历后遇到的那个元素是没有意义的,可以直接跳过。在树枝1、2、2上,在遇到最后一个元素2时,used为[1, 1, 0]。,因为在pop第一个2时已经将第一个2对应的used值变为0,这种情况下是树层去重,直接跳过当前i(即。其实只要意识到这是切割问题,切割问题就可以使用回溯搜索法把所有可能性搜出来,和刚做过的。来记录小数点的个数,当小数点已经满了就可以终止切割了,进行。,在pop该元素时让。

2024-03-25 16:51:07 394

原创 代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一树枝上使用过,一个维度是同一树层上使用过。为了理解去重我们来举一个例子,candidates = [1, 1, 2], target = 3,(方便起见candidates已经排序了)所以我们要去重的是同一树层上的“使用过”,同一树枝上的都是一个组合里的元素,不用去重。回看一下题目,元素在同一个组合内是可以重复的,怎么重复都没事,但两个组合不能相同。那么问题来了,我们是要同一树层上使用过,还是同一树枝上使用过呢?

2024-03-18 23:10:29 249

原创 代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合

参数为digits,但是单层递归中每次传入的digits是不同的,例如当层递归digits为"234",那么就会在下层递归中传入"34"。💡这道题跟以往回溯不同的地方在于,原来循环的对象都是相同的,例如1-n的数字组合,但是这道题会根据所选的电话号码,对应不同的字母组合。对于剪枝操作,可以在单层循环中设置条件判断路径总和是否已经超过n了,如果超过,那就没有继续循环的必要了,因为循环的元素是递增的。中的元素和为原开始的n。时,说明该路径已经走完了,无需继续递归,将路径添加到self.res中,并通过。

2024-03-17 18:46:48 271

原创 代码随想录算法训练营第二十四天|回溯算法理论基础、77. 组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。

2024-03-15 20:03:07 362 1

原创 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

自己做的时候觉得最难处理的逻辑在于如何将节点5(26)的结果传给4,使4变成30。考虑过要用双指针,但是想不下去了,因为一直没有意识到,遍历完5之后就会回到根节点4,这样子的话就说得通了。所以按照右中左的顺序,只要每次记录一个节点处理完后的节点值,然后遍历回上一层的时候自然而然就能相加了。💡以左孩子为例,本题的难点就在于要意识到,如果左孩子的值小于low,那么左孩子的右孩子的值有可能大于low。来遍历二叉树, 中节点的处理逻辑就是让cur的数值加上前一个节点的数值。很值得回味的一道题!

2024-03-15 15:43:47 270 1

原创 代码随想录算法训练营第二十二天|236. 二叉树的最近公共祖先(补3.12)、235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。去获取左右子树的结果,然后根据左右子树的结果来返回根节点的结果,也就是后续遍历中的。第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点。是不满足终止条件的。

2024-03-14 00:16:21 494

原创 代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数

💡比较重要的操作是单层递归里面判断是否是众数。用一个数组res去记录结果。当某一个数字遍历完成,与。💡跟昨天的用双指针法来中序遍历二叉树一样。刚开始不是特别能理解,用编译器自己跑一遍就好了。,并将res清空,然后将数字值append到res中;如果相等,则无需更新。需要注意的是,在遍历结束后,最后一组数字值没有被比较过,需要额外比较。和清空res,但仍需要在res后append数字值。大,则用该数字的出现频率。

2024-03-13 00:23:19 152

原创 代码随想录算法训练营第二十天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

💡这道题自己做的时候,根本不知道什么是二叉搜索树,就直接做了,所以不如增加判断节点值大小的方法高效。的最后两道题非常相似,是同一种思路,只需要通过找出数组中最大值的下标来划分左右子树即可。💡自己做的时候根本连暴力解法都没想到,直接想的是双指针,但是写着写着又绕进去了。💡分为四种情况,其中root1和root2均为空为终止条件。

2024-03-12 00:20:07 242 1

原创 代码随想录算法训练营第十八天|513.找树左下角的值、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

在Python中,如果你想在类的方法中创建一个变量,并且希望这个变量在整个实例的生命周期内都可用,你需要在变量前加上self关键字。如果在方法中创建一个没有加上self的变量,那么它将仅在该方法的范围内可见,而不会成为实例的一部分。因此,在单层递归下,一旦遇到左节点或者右节点的结果为True,就可以退出递归了。可以用当前叶子节点的深度与。,可以通过遍历节点,去得出每个节点的深度,当遇到叶子节点时,可以将叶子节点的深度与。这里的操作指的就是取出每个节点对应路径的总和,返回总和加上当前节点值得到的结果。

2024-03-11 21:38:17 870

原创 代码随想录算法训练营第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

如果root为叶子节点,列表里只存放root.val,如果不为也子节点,先将该节点的左节点与右节点的遍历结果合并,再将root.val+ "->"分别插入到每个元素之前。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。那么比较容易可以想到用递归函数,参数就传入节点,参数返回当前节点的左右子树的高度。递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0。参数:当前传入节点。返回值:以当前传入节点为根节点的树的高度。

2024-03-10 00:25:51 407 1

原创 代码随想录算法训练营第十六天|104.二叉树的最大深度、559. N叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

今天的内容主要练习二叉树遍历的递归写法。在此,再重点明确一下: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

2024-03-07 20:03:22 957

原创 代码随想录算法训练营第十五天|层序遍历 x 10、226.翻转二叉树 、101.对称二叉树

💡这道题需要注意的是,Node不再具有left和right指针,而是有一个children,而children是list类型的,因为一个节点可以有N个字节点。需要注意的是,要在循环开始前先插入根节点,循环判断的结果就是que中是否有元素:如果还有元素,说明还有节点没有遍历完,需要继续遍历。层序遍历按照从上到下、从左到右的顺序访问每一层的节点。但是需要注意的是,因为在循环过程中会在最后插入当前节点的子节点,所以当遇到每一层的最后一个元素的时候,需要手动判断一下,不执行改变next值的操作(next默认为。

2024-03-07 14:09:58 1004

原创 代码随想录算法训练营第十三天|239. 滑动窗口最大值、347.前 K 个高频元素

在计算机科学中,堆(Heap)是一种特殊的数据结构,它是一种树形结构,通常用于实现优先队列。

2024-03-05 22:49:23 542 1

原创 代码随想录算法训练营第十四天|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历

二叉树是一种层次结构的。

2024-03-05 21:41:32 367 1

原创 代码随想录算法训练营第十一天|20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

今天总体比较顺利,也大致了解了栈的应用。我的理解是,栈可以用于当前元素对前序元素有所影响的场景下:例如与上一个元素stack[-1]比较(匹配括号、删除相邻重复项)、根据当前元素的值改变前序元素(表达式求值)等。

2024-03-02 17:07:50 409

原创 代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈

在Python中,栈和队列可以使用列表(List)来实现,因为列表提供了在末尾进行添加append()和弹出pop()操作的高效方法。

2024-03-01 21:17:08 642 1

原创 代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

今天题目写的还比较顺利,有一两道暂时想不出思路的稍微看下解析也马上能自己写出来了。除了一些算法思想,今天也学到了list转str的技巧,例如,这条语句的意思就是将列表s转化为字符串,列表中的元素用a隔开,a如果为空,就代表直接相连。

2024-02-28 22:31:26 300

原创 代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信、15. 三数之和、18. 四数之和

今天没刷完,前两题做出来了,第三题用哈希法超出时间限制了,其他方法还没来得及看。

2024-02-28 00:10:40 288

原创 代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

对哈希没有一点基础,所以今天做题之前花了一个多小时的时间去学习哈希表。

2024-02-27 00:28:44 650 1

原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、 面试题 02.07. 链表相交、142.环形链表II

今天是在开心与崩溃中反复横跳的一天。

2024-02-24 20:38:49 401

原创 代码随想录算法训练营第三天| 203.移除链表元素、707.设计链表、206.反转链表

今天的题目感觉最重要的还是弄清楚链表是什么,以及如果实现节点之间的连接。查了很多资料,有一篇文章个人认为解释的很清楚,举例也不错,分享在这里 -

2024-02-23 22:11:08 298

原创 代码随想录算法训练营第二天| 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

字面意思上理解,非递减顺序是不是就代表只要有一组元素不是递减的,那么整个数组就不算递减。后来,正确理解了非递减顺序之后,想到了要用暴力解法。💡这道题目感觉很绕,一直把自己绕在左闭右闭里,所以也一直不理解题目提示里说的要注意区间一致性。感觉另一个复杂点在于,如何把四种情况下,横纵坐标的区间定义清楚。,也还是不理解为什么参考代码里的时间复杂度是O(n)而不是O(n^2)。后来问了群友加上自己思考,right会执行n次,但是left也最多执行n次。💡只想到了暴力解法,也很难得的竟然一次就写对了,很开心。

2024-02-22 22:52:09 330

原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

基础比较差,已经有点记不清python数据结构的内容了,就先找了些资料回顾了一下。

2024-02-21 19:59:46 186 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除