- 博客(18)
- 收藏
- 关注
原创 代码随想录算法训练营第十九天|LeetCode235 二叉搜索树的最近公共祖先、LeetCode701 二叉搜索树中的插入操作、LeetCode450 删除二叉搜索树中的节点
解题思路:利用二叉搜索树是有序的这一特性。
2025-05-17 16:22:36
295
原创 代码随想录算法训练营第十八天|LeetCode530 二叉搜索树的最小绝对差、LeetCode501 二叉搜索树中的众数、LeetCode236 二叉树的最近公共祖先
解题思路:二叉搜索树就要想到中序遍历、有序数组。
2025-05-16 17:44:34
832
原创 代码随想录算法训练营第十七天|LeetCode654 最大二叉树、LeetCode612 合并二叉树、LeetCode700 二叉搜索树中的搜索、LeetCode98 验证二叉搜索树
解题思路:和利用中序和后序数组构造二叉树思想差不多。
2025-05-15 21:29:42
194
原创 代码随想录算法训练营第十六天|LeetCode513 找树左下角的值、LeetCode112 路径总和、LeetCode106 从中序与后序遍历序列构造二叉树
其他方法:递归求最大深度的叶子结点、层次遍历。
2025-05-15 17:07:00
658
原创 代码随想录算法训练营第十四天|LeetCode222 完全二叉树的节点个数、LeetCode110 平衡二叉树、LeetCode257 二叉树的所有路径、LeetCode404 左叶子之和
解题思路:递归/层次遍历完计数如何判断是否是满二叉树?代码:关键点在于判断是否子树是满二叉树。
2025-05-14 21:01:08
869
原创 代码随想录算法训练营第十三天|LeetCode226 翻转二叉树、LeetCode101 对称二叉树、LeetCode104 二叉树的最大深度、LeetCode111 二叉树的最小深度
交换每个结点的左右孩子指针注意1 不推荐使用中序遍历时交换左右孩子指针(左根右),当处理完左子树时,该树交换到右边了,然后根据遍历顺序去处理右子树,这相当于原右子树没有被处理,原左子树被处理了两遍。代码:递归法、迭代法、层次遍历。
2025-05-10 21:34:31
618
原创 代码随想录算法训练营第十二天|LeetCode 144\145\94二叉树的递归/迭代/统一迭代遍历、LeetCode 102二叉树的层序遍历
这代表该结点遍历过了,但还没处理(即该结点左右子树均已压入栈中,且该结点的值还没到result中去)(在中序遍历中,当读取到null时,表示其左子树已处理完毕,均已记录到result中,因此该结点可以处理了)写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。注意1:入栈顺序是,右孩子先入栈,左孩子再入栈。因为栈是后入先出,后面栈弹出元素时,先处理左孩子,再处理右孩子。
2025-05-09 22:09:55
722
原创 代码随想录算法训练营第十一天|LeetCode150 逆波兰表达式求值、LeetCode239 滑动窗口最大值、LeetCode347 前k个高频元素
如果把滑动窗口当作一个队列,那么每次移动都需要判断队列中的最大值,因此如果使用单调队列,可以在线性的时间复杂度内完成。除了LeetCode提供的优先队列的库,如何自己实现?--->目前还不会写,等学完二叉树再回来看看。对频率进行排序--->使用优先级序列--->其实就是堆(大顶堆、小顶堆)(堆是完全二叉树)在该题中,每次滑动窗口的移动很像【队列的队头出去一个元素队尾再进来一个元素】--->维护大小为k的堆(使用小顶堆)--->push(元素)pop(堆顶)2、为什么使用单调队列?1、为什么要使用队列?
2025-05-09 22:06:29
313
原创 代码随想录算法训练营第十天|LeetCode232 用栈实现队列、LeetCode225 用队列实现栈、LeetCode20 有效的括号、LeetCode1047 删除字符串中的所有相邻重复项
了解栈、队列的结构学会使用栈来做括号、字符串的匹配。
2025-05-07 15:30:16
329
原创 代码随想录算法训练营第九天|LeetCode151 翻转字符串里的单词、LeetCode55 右旋字符串、LeetCode28 实现 strStr()、LeetCode459 重复的子字符串
kmp算法后面再深入了解后面两道题之后再刷。
2025-05-06 21:10:51
453
原创 代码随想录算法训练营第八天|LeetCode344 反转字符串、LeetCode541 反转字符串ll、卡码网54 替换数字
自己解题思路:双指针法:一个在头,一个在尾,交换两个指针对应的数值后,指针同时向中间移动。
2025-05-01 17:42:45
294
原创 代码随想录算法训练营第七天|LeetCode 454 四数相加ll、LeetCode383 赎金信、LeetCode15 三数之和、LeetCode18 四数之和
之前的两数之和是在一个数组列表内找两个数之和=target。
2025-04-30 22:05:57
361
原创 代码随想录算法训练营第六天|LeetCode242 有效的字母异位词、LeetCode349 两个数组的交集、LeetCode202 快乐数、LeetCode1 两数之和
哈希法应用场景:需要快速判断元素是否在集合内哈希法使用方法:构造哈希函数及定义长度(数组、set、map)--如果数值范围固定可以考虑使用数组--当数值跨度大、输出结果去重且无顺序可以考虑使用set--需要返回数值及索引可以考虑使用map。
2025-04-28 18:30:27
568
原创 代码随想录算法训练营第四天|LeetCode24 两两交换链表中的节点、LeetCode19 删除链表的倒数第N个节点、LeetCode160 链表相交、LeetCode142 环形链表
虚拟头结点的使用情况:[增删改]用的比较多,[查]一般不用没思路的时候想想双指针法:快慢双指针、先走n步等等。
2025-04-26 23:27:00
466
原创 代码随想录算法训练营第三天|LeetCode203 移除链表元素、LeetCode707 设计链表、LeetCode206 反转链表
一些链表的添加删除操作使用虚拟头结点(具体看题目),不要无脑使用链表结构实际在js中是一个对象(?
2025-04-25 22:22:38
394
原创 代码随想录算法训练营第二天|LeetCode209 长度最小的子数组、LeetCode209 59螺旋矩阵II、LeetCode58 区间和、开发商购买土地
四道题目总结:双指针法(滑动窗口)、区间不变量、区间前缀和、二维区间前缀和大多数方法都是为了优化暴力法,减少时间复杂度学习一下acm模式代码区间定义、双指针法(快慢、左右、滑动窗口)、区间前缀和看一下时间复杂度知识。
2025-04-24 23:03:15
374
原创 代码随想录算法训练营第一天|LeetCode704 二分查找、LeetCode27 移除元素、LeetCode977 有序数组的平方
有些代码写的有点重复目前只会使用最简单方法解题,尽可能考虑时间复杂度有时间了解一下排序算法今日两种双指针法都降低了时间复杂度,以后可以考虑使用场景(什么时候能使用双指针法)三道题目:循环区间不变量、快慢指针法、双指针法。
2025-04-23 22:44:41
529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2