- 博客(19)
- 收藏
- 关注
原创 神奇AC在哪里|代码随想录算法训练营(DAY24)|93.复原IP地址、 78.子集、90.子集II
与分割回文串做法很相似,一个是判断回文,一个是判断数字是否合法。需要一个额外的变量来技术当前地址字段的长度,不能长于3.78.子集解法就是回溯算法模板本身,几乎没有变化,值得注意的就是在递归结束条件判断这个地方可以不用判断,只是for循环即可。否则容易漏掉空集合和单元素的集合90.子集II这个题和40.组合总和II用到的方法一样,40这道题目的博客因为有事情所以没有写,也是回溯算法的思想,但是用到了判断重复的方法。方法有很多:用set集合来判断元素是否出现过、添加used数组进行标记、也可以用将数
2025-09-13 22:53:57
198
原创 神奇AC在哪里|代码随想录算法训练营(DAY21)| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
这里的修剪判断需要注意一些问题:当当前节点不在范围内时,不能单纯的将其整个所在的子树删除,因为可能子树中还有其他符合范围的值,所以要递归修剪这颗子树的左子树或者右子树来继续寻找符合数值范围的节点。108.将有序数组转换为二叉搜索树因为数组是有序的,而且题目要求是构建平衡的树,所以根节点在数组的中间,然后将数组分裂成左右两部分,分别重复递归构建左右子树即可,注意边界条件的处理标准的一致性。538.把二叉搜索树转换为累加树要求是将节点的值改为所有比当前值大的值的和,因为是二叉搜索树,所以右侧节点的值是一
2025-09-09 09:16:35
233
原创 神奇AC在哪里|代码随想录算法训练营(DAY20)|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
这个题目有个好的条件那就是这是一个二叉搜索树,整体的节点是有序的,所以最近的公共祖先节点的值一定在这两个节点的值中间。最近公共祖先即为从上往下遍历时,第一个满足值在两个节点值中间的节点。701.二叉搜索树中的插入操作有两种做法,一种是改变树的结构将节点插入到树的内部,这个稍微复杂一点,需要处理子树和后序的孩子链接到该节点上。另一种比较简单,就是单纯的将节点插入到叶子节点上,其余的操作什么都不用做,只需要判断大小。450.删除二叉搜索树中的节点这个乍一看和添加差不多,但是删除要考虑的事情就多了(dog
2025-09-08 22:28:41
331
原创 神奇AC在哪里|代码随想录算法训练营(DAY17)|654最大二叉树、617合并二叉树、 700.二叉搜索树中的搜索 、98验证搜索二叉树
选取最大元素,然后从最大元素处将数组一分为二,之后不断递归构造树。617合并二叉树将两颗子树的对应位置的值相加,注意两颗子树应该同步进行遍历相加处理。700二叉搜索树中的搜索最硬气的一集,递归判断直接A98验证二叉搜索树最直观的方法就是将树进行中序遍历之后,如果结果是升序的就是二叉搜索树。另外也有递归判断的方法,还没尝试,可以学习。
2025-09-05 13:32:28
148
原创 神奇AC在哪里|代码随想录算法训练营(DAY16)|找左下角的值、路径总和、从中序与后序遍历序列构造二叉树
以后时间不怎么充裕,刷题时间减少,链接不具体放了具体做法是采用的层序遍历,将二叉树遍历,之后返回最后一层的第一个值便是最下角的值。也有很多其他的方法递归等。路径总和递归和回溯,判断节点左右孩子是否存在来确定叶子节点。中序后序构造二叉树通过后序遍历确定根,然后根据中序划分左右子树,不断迭代划分,最终的到二叉树。也是需要注意回溯
2025-09-05 13:22:32
205
原创 神奇AC在哪里|代码随想录算法训练营(DAY15)|110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、222. 完全二叉树的节点个数
左右子树的高度差要小于等于1。所以如果一旦有部分子树不符合之后,整颗树可以直接返回false。如果左右子树都满足高度差小于等于1(即返回值不为false,而是具体的子树高度),那么当前节点的高度就为。因为需要统计完左右子树的高度之后才能知道父节点的高度,所以要采用后序遍历,先遍历左右子节点再处理根节点。257. 二叉树的所有路径要记录二叉树的所有路径,就是要从根节点开始遍历完每个节点,同属输出所有路径。用到的遍历顺序就是前序遍历。首先用前序遍历,先处理根节点,把根节点加入到路径当中。再向后遍历左右子节点
2025-09-03 20:03:09
459
原创 神奇AC在哪里|代码随想录算法训练营(DAY14)|226. 翻转二叉树、101. 对称二叉树、104. 二叉树的最大深度、111. 二叉树的最小深度
这几个题目对于树的操作都要明确是前中后序哪个遍历方式。1.确定递归函数的参数和返回值2.确定终止条件3.确定单层的递归逻辑使用前序遍历和后序遍历都可以,使用中序遍历不太好理解。以前序遍历为例,递归交换左右孩子交点。之后递归处理左右子树。注意中序遍历处理的子树,是处理完一侧子树之后,经过翻转,再处理另一侧子树。指的注意的是,反转之后,未处理的子树变换了位置,所以代码上像是处理的同一侧。只能采用后序遍历,因为通过递归判断的是左右子树内外两侧的节点是否相等。只有比较晚左右子树是否对称,才能判断根节点是否对称
2025-09-03 10:15:06
353
原创 神奇AC在哪里|代码随想录算法训练营(DAY13)|二叉树的遍历(前中后序、递归迭代、层序)
递归遍历方法比较简洁,迭代方法也要掌握。还有好多比如前中后序统一的迭代写法没有这个整理,后序有时间补充,这一篇博客不是特别完善。
2025-09-02 11:49:34
319
原创 神奇AC在哪里|代码随想录算法训练营(DAY11)| 150. 逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素
通过字典进行字符到运算符的映射,前k大或第k大用小顶堆,滑动窗口中的只记录可能最大值的思想以减少时间复杂度。
2025-08-31 09:35:38
392
原创 神奇AC在哪里|代码随想录算法训练营(DAY)10| 232.用栈实现队列、 225. 用队列实现栈、 20. 有效的括号
python当中栈的操作感觉用list即可比较好的实现。
2025-08-29 21:44:29
209
原创 神奇AC在哪里|代码随想录算法训练营(DAY9)|151. 反转字符串中的单词、右旋字符串
除了KMP算法之外其他的算法不算特别难以理解,但是针对字符串和字符的处理语法还需熟练,包括各种切片,反转,slpit等等。
2025-08-28 19:55:54
352
原创 神奇AC在哪里|代码随想录算法训练营(DAY8)|344.反转字符串 、541. 反转字符串II 、替换数字
注意是原地反转就行。python的交换语法。python的写法有很多,双指针、栈、循环确定左右指针位置等541、反转字符串II这里需要注意的是每2k个数字反转前k个,所以每次的左右指针的初始位置需要重新计算,start用于记录每次的起始位置。这里right的确定位置需要注意一下,需要判断最后的位置不要超过list长度,即最后的将list转换为字符串的写法注意一下给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于
2025-08-27 10:22:36
279
原创 神奇AC在哪里|代码随想录算法训练营(DAY7)| 454.四数相加I、 383. 赎金信、 15. 三数之和、 18. 四数之和
哈希这一部分原理方法还是不算难理解,就是哈希表存法写法比较多,注意语言的熟悉和应用。最后两双指针求数字和的方法多看多练习。
2025-08-26 21:16:49
979
原创 神奇AC在哪里|代码随想录算法训练营(DAY6)|242.有效的字母异位词、 349. 两个数组的交集、202. 快乐数、1. 两数之和
快速判断一个元素是否重复出现过,核心思路就是用哈希。将第一个字符串的元素存储到哈希表当中。因为都是字母,所以将其assic码中的相对位置作为key,出现的次数作为value。将第一个字符串判断完成之后,进行第二个字符串的判断。操作还是一样的,只不过统计次数变为了减操作。最后如果整个哈希表的value都是0的话,证明两个字符串相等。第二种方法就是用两个字典,只要两个字典相等则为字母异位词。defaultdict是Python内建dict类的一个子类,它的其他功能与dict相同,但会为一个不存在的键提
2025-08-25 12:56:23
301
原创 神奇AC在哪里|代码随想录算法训练营(DAY4)|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
快慢指针,环的判断、环的定位,交叉遍历链表。
2025-08-23 20:00:18
637
原创 神奇AC在哪里|代码随想录算法训练营(DAY3)|203.移除链表元素、707.设计链表、206.反转链表
该题目的方法和707设计链表当中的删除元素原理大致相同,只不过一个删除的是位置,一个删除的是特定值的节点。核心是添加一个头节点dummyHead方便统一所有节点的删除操作。pre指向curr遍历节点的前一个,方便进行删除操作。707.设计链表吼吼吼,这题真是好一个酣畅漓淋的编程。需要自己定义链表节点的结构!这个题就是需要处理的小细节比较多。核心的方法是初始化,查询、删除和添加。头插和尾插都可以直接调用普通添加的方法实现。另外就是仍然需要头节点辅助进行节点删除和添加操作的统一。self.size指
2025-08-23 18:57:25
265
原创 神奇AC在哪里|代码随想录算法训练营(DAY2)|209. 长度最小的子数组、59. 螺旋矩阵 II
第一个代码出问题是在左边界收缩的时候没有想清楚思路,应该当窗口内部的值大于target时,移动左边界应该是一个while,而不是一个if判断。但是模拟的时候对于端点的判断要一致,因为是不断转圈赋值,所以统一采取左闭右开的形式,这样每次处理都是一致的边界处理标准,也能保证所有位置均赋值。修改之后的代码是一个比较标准的滑动窗口,以窗口终点作为循环结束的判断标准,滑动窗口的起点通过while多次收缩并判断。思路:滑动窗口算法,边滑动边判断。当窗口内部值大于等于目标值的时候对窗口进行压缩,以求的最小的窗口宽度。
2025-08-21 16:33:59
396
原创 Leetcode|42接雨水、1137第N个泰波那契数
其中s = a + b + c就是当前的三个数,之后需要将a,b,c的值更新,更新的核心点在于向后计算泰波那契数,a的值就用不到了,对应的三个值就往后顺延为b,c,s的值,所以就有了a,b,c = b,c,s这个重新赋值语句。因为递归做了大量的重复计算,比如再求解trbo(9)、trbo(10)、trbo(11)的时候trbo(8)都会被重新拖出来计算一遍。前面的返回和递归是一样的,后面的for循环已经是从小到大开始计算了,后续用a,b,c来不断记录第N个泰波那契数的自底向上的构成值。
2025-08-21 13:18:18
526
原创 神奇AC在哪里|代码随想录算法训练营(DAY1)|704. 二分查找、27. 移除元素、977.有序数组的平方
这是第一回写博客,有不严谨或者错误的地方,还望各位大佬多多指正!
2025-08-20 17:01:33
445
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅