- 博客(380)
- 收藏
- 关注
原创 Leetcode 剑指 Offer II 155. 将二叉搜索树转化为排序的双向链表
本文介绍了将二叉搜索树就地转换为排序双向循环链表的两种方法。第一种采用分治法,递归处理左右子树并调整指针指向,最终连接头尾形成循环链表。第二种利用中序遍历的有序性,遍历时维护前驱节点并动态调整指针,最后同样连接头尾完成循环。两种方法时间复杂度均为O(N),空间复杂度为O(N)(递归栈开销)。文章通过示例和详细代码注释解释了实现过程,适用于LeetCode相关题目解答。
2025-12-21 09:27:12
661
原创 Leetcode 剑指 Offer II 154. 复杂链表的复制
题目要求复制一个包含next和random指针的复杂链表。解决方案分两步:首先遍历原链表,建立新节点并保存原节点到新节点的映射;然后再次遍历,根据映射关系设置新节点的random指针。这种方法保证了正确复制链表结构,时间复杂度O(N),空间复杂度O(N)。关键点在于使用字典维护节点间的对应关系,从而正确处理random指针的指向问题。
2025-12-13 10:36:18
220
原创 Leetcode 剑指 Offer II 153. 二叉树中和为目标值的路径
文章摘要: 本文介绍了LeetCode剑指Offer专项题解中关于二叉树路径总和问题的两种解法。题目要求找出所有从根节点到叶子节点路径总和等于给定目标值的路径。方案1采用递归DFS,在遍历时维护当前路径和路径和,到达叶子节点时判断是否满足条件。方案2使用迭代BFS,将节点、路径和当前和存入队列,同样在叶子节点处进行判断。两种方法时间复杂度均为O(N),但空间复杂度为O(N²),因需存储路径信息。文章强调了节点值可能为负,必须完整遍历到叶子节点才能确定路径和。更多题解可在公众号"算法精选"
2025-12-06 10:52:50
758
原创 Leetcode 剑指 Offer II 152.验证二叉搜索树的后序遍历序列
这道题要求判断一个整数数组是否是二叉搜索树的后序遍历结果。解决方案有两种:分治法和单调栈法。 分治法利用后序遍历和二叉搜索树的性质,递归验证左子树、右子树与根节点的关系。时间复杂度平均为O(NlogN),最差O(N^2),空间复杂度O(N)。 单调栈法通过倒序遍历序列,维护单调递增栈和根节点,确保右子树已遍历完毕。每个节点只需处理一次,时间复杂度O(N),空间复杂度O(N)。 两种方法各有优劣,分治法直观但效率不稳定,单调栈法高效但逻辑较复杂。根据需求选择合适方案即可验证后序遍历序列的有效性。
2025-11-30 08:37:05
916
原创 Leetcode 剑指 Offer II 151.彩灯装饰记录 III
本文介绍了如何按层交替方向打印二叉树的节点值。题目要求第一层从左到右,第二层从右到左,以此类推。解决方案基于BFS遍历,通过维护一个方向标志变量,在每层结束后反转方向。对于从右到左的层,只需将该层结果翻转后加入最终列表。算法时间复杂度O(N),空间复杂度O(N),其中N为节点数。该方法是对常规层序遍历的简单扩展,适用于类似需要交替方向处理的问题。
2025-11-22 08:25:47
20
原创 Leetcode 剑指 Offer II 150.彩灯装饰记录 II
本文介绍了如何按层打印二叉树节点的解决方案。题目要求从左到右返回每一层的节点值,每层结果单独成行。解决方案采用BFS遍历,使用队列记录当前层节点,并维护当前层长度。遍历时保存当前层节点值,并将子节点加入队列,然后将队列更新为下一层节点起点。这种方法确保每层节点单独处理,时间复杂度O(N),空间复杂度O(N)。代码使用Python实现,适用于需要分层处理树节点的情况。
2025-11-16 09:16:17
394
原创 Leetcode 剑指 Offer II 149.彩灯装饰记录 I
本文介绍了二叉树层序遍历的两种BFS实现方案。题目要求从左到右输出每层节点的值。第一种方案使用列表和for循环,动态扩展队列;第二种方案使用双端队列和while循环,逐个处理节点。两种方法时间复杂度均为O(N),空间复杂度O(N)。文章提供了Python代码示例,并指出这是不需要单独处理每层节点的通用BFS模板。适用于树结构遍历场景,确保每个节点仅被访问一次。
2025-11-09 09:40:35
331
原创 Leetcode 剑指 Offer II 148.验证图书取出顺序
本文探讨了如何验证书籍的放入和取出序列是否匹配。题目给定两个整数序列putIn和takeOut,要求判断takeOut是否是putIn的有效弹出序列。作者提出了两种解决方案: 栈模拟法:使用栈模拟书籍的放入和取出过程,逐个比较栈顶元素与弹出序列的当前元素,匹配则弹出并移动指针。最终通过检查栈是否为空来判断序列是否有效。时间复杂度O(N),空间复杂度O(N)。 原地双指针法:优化空间复杂度,将putIn数组本身作为栈,使用双指针跟踪栈顶和弹出序列位置。同样逐个比较并更新指针,最终检查栈指针是否为-1来判断有效
2025-11-02 08:44:35
1016
原创 Leetcode 剑指 Offer II 147.最小栈
本文介绍了如何设计一个最小栈,该栈支持常规栈操作(push、pop、top)并能在常数时间内获取最小元素。通过使用两个栈(一个存储普通元素,一个单调递减栈存储最小值),确保所有操作的时间复杂度为O(1)。关键点在于:当新元素小于等于单调栈顶时才入栈,出栈时若元素等于栈顶则同步出栈,从而保证单调栈顶始终为当前最小值。该方案满足题目要求,适用于高频操作场景。
2025-10-25 10:51:11
426
原创 Leetcode 剑指 Offer II 146.螺旋遍历二维数组
本文介绍了两种解决矩阵螺旋遍历问题的算法。第一种方法模拟顺时针遍历过程,使用方向字典和集合标记访问过的点,时间复杂度O(RC),空间复杂度O(RC)。第二种方法采用"剥洋葱"式分层遍历,每层按右、下、左、上顺序处理,时间复杂度仍为O(RC)但空间复杂度优化至O(1)。两种方法都适用于任意大小的二维数组,完整代码可在公众号「算法精选」获取。
2025-10-18 17:50:37
910
原创 Leetcode 剑指 Offer II 145.判断对称二叉树
文章摘要: 本文介绍了判断二叉树是否轴对称的三种解决方案。方案1通过生成镜像树并逐节点比较,方案2采用递归直接比较对称位置的节点,方案3使用迭代方法配合双队列实现。三种方法的时间复杂度均为O(N),空间复杂度根据不同实现分别为O(N)或O(N/2)。文章详细分析了每种方法的思路、复杂度和代码实现,并提供了LeetCode题目链接和示例说明,帮助读者理解对称二叉树的判断逻辑。
2025-09-21 12:34:12
568
原创 Leetcode 剑指 Offer II 144.翻转二叉树
本文介绍了两种翻转二叉树的方法:递归和迭代。递归方法通过交换左右子树并递归处理子节点实现镜像翻转;迭代方法使用队列,依次交换每个节点的左右子节点,并处理非空子节点。两种方法的时间复杂度均为O(N),空间复杂度为O(N),适用于所有二叉树节点。
2025-09-14 09:13:38
390
原创 Leetcode 剑指 Offer II 143.子结构判断
本文介绍了如何判断二叉树B是否是A的子结构。通过递归比较两棵树的节点值及左右子树结构,若B与A的某部分完全匹配则返回true。算法时间复杂度为O(MN),空间复杂度为O(M),其中M和N分别为两棵树的节点数。代码实现中先处理空树情况,然后定义match函数递归匹配节点,最终通过比较当前节点或左右子树来确认子结构关系。
2025-09-06 10:08:25
426
原创 Leetcode 剑指 Offer II 142.训练计划 IV
本文介绍了合并两个有序链表的两种解法。第一种是迭代法,使用哨兵节点和归并排序思路,时间复杂度O(M+N),空间复杂度O(1)。第二种是递归法,通过比较节点值决定合并顺序,时间复杂度O(M+N),但空间复杂度为O(M+N)的递归栈开销。两种方法都通过比较节点值逐步构建新链表,最终返回合并后的有序链表头节点。
2025-08-31 10:02:09
614
原创 Leetcode 剑指 Offer II 141.训练计划 III
本文介绍了反转链表的三种解法:迭代法、递归返回头尾节点法和优化递归法。迭代法通过双指针逐个反转节点;递归法先处理子链表,再将当前节点连接到反转后的链表尾;优化递归法简化了递归返回值。三种方法时间复杂度均为O(N),迭代法空间复杂度为O(1),递归法为O(N)。文章提供了Python代码实现,并分析了各方法的优缺点。
2025-08-23 09:36:15
513
原创 Leetcode 剑指 Offer II 140.训练计划 II
这是一道链表遍历题目,要求找到链表中倒数第cnt个节点。文章提出了三种解决方案: 数组存储法:遍历链表存入数组,直接取倒数第cnt个元素。时间复杂度O(N),空间复杂度O(N)。 两次遍历法:第一次统计节点总数n,第二次遍历到第n-cnt+1个节点。时间复杂度O(N),空间复杂度O(1)。 双指针法:使用快慢指针,快指针先走cnt步,然后两指针同步移动,当快指针到达末尾时慢指针即为所求。时间复杂度O(N),空间复杂度O(1),且只需一次遍历。 最优解法是双指针法,既高效又节省空间。题目来自LeetCode剑
2025-08-16 10:53:23
368
原创 Leetcode 剑指 Offer II 139.训练计划 I
这是一道将数组中的奇数调整到偶数前面的编程题。文章介绍了两种解决方案:第一种是新建数组,通过双指针分别指向奇数和偶数位置依次填充,时间复杂度O(N),空间复杂度O(N);第二种是原地交换法,使用双指针从两端向中间扫描交换奇偶数,时间复杂度O(N),空间复杂度O(1)。两种方法都能高效解决问题,第二种方案更节省空间。文章还提供了详细的代码实现和复杂度分析,适合算法学习者参考。
2025-08-09 09:08:36
412
原创 Leetcode 剑指 Offer II 138.有效数字
这道题目要求判断给定的字符串是否可以表示一个有效数字,包括整数、小数以及科学计数法形式。有效数字可能包含前导空格、可选正负号、数字、小数点和指数部分(e/E)。解决方案通过分步验证各部分的有效性来处理不同情况: 去除首尾空格:确保前后空格不影响数字验证。 检查指数部分:如果存在e/E,将字符串分为左右两部分: 左半部分允许有小数点和数字。 右半部分必须是整数(不允许小数点)。 验证基础数字部分:确保至少有一个数字,符号仅出现在开头,小数点最多一个且位置合法。 关键点: 正确处理符号、小数点、空格的位置和数量
2025-08-02 09:21:50
949
原创 Leetcode 剑指 Offer II 137.模糊搜索验证
本文介绍了使用动态规划解决正则表达式匹配问题。题目要求实现支持'.'和''通配符的模糊搜索功能。'.'匹配任意单个字符,''匹配前一个字符零次或多次。解决方案采用记忆化搜索方法,通过比较字符串和模式串的字符,分情况处理:当模式串用完时检查字符串是否用完;当字符串用完时检查剩余模式串是否可跳过;遇到'*'时考虑使用或不使用当前字符组合。算法时间复杂度O(MN),空间复杂度O(MN),通过保存中间结果避免重复计算。代码实现简洁高效,适用于文本编辑器中的模糊搜索场景。
2025-07-26 09:48:10
649
原创 Leetcode 剑指 Offer II 136.删除链表的节点
本文介绍了两种删除链表中指定值节点的解决方案。第一种方案特殊处理头节点,若删除值为头节点则直接返回头节点的下一个节点;否则使用双指针遍历链表找到目标节点并删除。第二种方案通过添加哨兵节点简化处理,统一头节点和普通节点的删除逻辑。两种方案的时间复杂度均为O(N),空间复杂度为O(1)。文章提供了Python实现代码,并建议读者关注公众号获取更多相关内容。
2025-07-19 08:59:26
949
原创 Leetcode 剑指 Offer II 135.报数
这道题目要求生成从1到最大n位数的整数序列。解题思路非常简单,只需确定n位数的最大值作为循环终点,然后从1开始依次生成数字即可。文章提出了三种解决方案:1) 使用10的n次方作为上限;2) 通过字符串转换得到n个9的数字;3) 循环生成n个9的数字。所有方案的时间复杂度都是O(10^N),空间复杂度O(1)。代码实现简洁明了,直接使用Python的range或循环即可完成。
2025-07-12 08:27:20
309
原创 Leetcode 剑指 Offer II 134.Pow(x, n)
文章摘要: 本文介绍了两种解决LeetCode剑指Offer面试题16(数值的整数次方)的算法方案。题目要求实现pow(x, n)函数,计算x的n次幂。方案1采用分治法,通过二分递归降低复杂度至O(logN),并使用memo数组存储中间结果避免重复计算。方案2使用快速幂算法,将空间复杂度优化至O(1),利用x^(2n)=(x^2)^n的性质快速收敛。两种方法都考虑了n为负数、x为0等边界条件。文章还提供了Python代码实现,并推荐了相关扩展题目。
2025-07-06 11:28:15
647
原创 Leetcode 剑指 Offer II 133.位 1 的个数
这篇文章介绍了统计32位无符号整数二进制表示中1的个数的多种方法。主要内容包括:1) 直接统计法:通过二进制字符串转换或移位操作逐个统计;2) 位运算优化法:利用n&(n-1)或n&-n快速定位1的位置,减少循环次数。两种方法的时间复杂度分别为O(logN)和O(M)(M为1的个数),空间复杂度均为O(1)。文章提供了Python代码示例,并解释了各种位运算的原理,适合需要高效解决汉明重量问题的开发者参考。
2025-06-28 10:38:05
808
原创 Leetcode 剑指 Offer II 132.砍竹子 II
这篇题解分析了一道关于将竹子分割以求最大乘积的编程问题。文章首先指出题目与上周类似但数据规模更大,并需取模处理。通过分析前几个例子,发现应优先分割为3的段,根据余数调整分割策略:余0全分3段,余1转成两个2段,余2保留一个2段。这种数学规律解法的时间复杂度为O(1),避免了动态规划的大数问题。代码简洁高效,直接根据余数情况返回相应计算结果。
2025-06-21 09:43:36
671
原创 Leetcode 剑指 Offer II 131.砍竹子 I
题目要求将正整数竹子分成若干段,求每段长度的最大乘积。解决方案采用记忆化搜索技术,拆分竹子为两部分并递归计算最大乘积。对于长度<=3的竹子,乘积固定为N-1;对于更长的竹子,遍历所有可能的拆分方式,存储已计算结果避免重复计算。该算法时间复杂度O(N²),空间复杂度O(N),适用于题目给定的小数据范围。
2025-06-14 10:21:42
616
原创 Leetcode 剑指 Offer II 130.衣橱整理
题目难度: 中等今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-06-07 10:19:05
485
原创 Leetcode 剑指 Offer II 129.字母迷宫
这篇文章介绍了如何在一个字符矩阵中寻找目标单词路径的解决方案。文章使用了深度优先搜索(DFS)算法,通过递归遍历矩阵中与目标字符串当前字符匹配的相邻单元格,同时利用回溯来避免重复访问。为了优化空间和时间,作者将访问标记直接存储在原始矩阵中,并通过剪枝提前终止无效搜索路径。该算法的时间复杂度为O((3^L)*RC),空间复杂度为O(L),其中L是目标字符串长度,RC是矩阵行列数。文章还提供了Python代码实现,并对关键步骤进行了详细解释,适合中等难度面试题的解答。
2025-06-01 11:51:32
617
原创 Leetcode 剑指 Offer II 128.库存管理 I
这道题目要求在旋转后的有序数组中寻找最小元素。原始数组按升序排列,但经过旋转后将部分元素移至末尾。直接遍历或使用min函数虽可行但未利用有序性,最优解法是二分查找。 关键思路是:比较中间元素与末尾元素,若中间值小于末尾,说明后半段有序,最小值在左半段(包括中间);若中间值大于末尾,则后半段无序,最小值在右半段;若相等则无法判断,需逐个比较。最终时间复杂度为O(logN)~O(N),空间复杂度O(1)。 示例解法通过二分查找逐步缩小范围,保留最小值候选,最终返回正确结果。
2025-05-24 10:13:54
626
原创 Leetcode 剑指 Offer II 127.跳跃训练
本文介绍了如何解决 LeetCode 上的“青蛙跳台阶”问题。题目要求计算在 n 阶台阶上,每次跳 1 或 2 级台阶的不同跳跃方式总数,结果需取模 1e9+7。通过动态规划方法,定义 dp 数组表示每阶台阶的跳法数,转移方程为 dp[n] = dp[n-1] + dp[n-2],并优化空间复杂度至 O(1)。最终代码使用两个变量 pre 和 prepre 来存储前两个台阶的跳法数,通过循环计算并取模得到结果。该方法时间复杂度为 O(N),适用于 0 <= n <= 100 的范围。
2025-05-17 10:11:44
592
原创 Leetcode 剑指 Offer II 126.斐波那契数
本文介绍了如何计算斐波那契数列的第 n 项,并提供了基于动态规划的解决方案。斐波那契数列从 0 和 1 开始,后续每一项都是前两项的和。文章通过初始化条件和递推式,展示了如何避免重复计算。优化后的方法仅使用两个变量来存储前两项的值,从而将空间复杂度降低到 O(1)。最终代码在 Python 中实现,并强调了取模操作的重要性,以防止大数溢出。文章还提供了作者的多个平台链接,方便读者进一步学习和交流。
2025-05-10 11:48:35
576
原创 Leetcode 剑指 Offer II 125.图书整理 II
题目难度: 简单今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-05-04 11:40:52
678
原创 Leetcode 剑指 Offer II 124. 推理二叉树
题目难度: 中等今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-04-26 11:42:59
924
原创 Leetcode 剑指 Offer II 123.图书整理 I
题目难度: 简单今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-04-20 10:48:48
871
原创 Leetcode 剑指 Offer II 122.路径加密
题目难度: 简单今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-04-13 12:13:14
395
原创 Leetcode 剑指 Offer II 121.寻找目标值 - 二维数组
题目难度: 中等今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-03-29 11:44:07
738
原创 Leetcode 剑指 Offer II 120.寻找文件副本
题目难度: 简单今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-03-22 11:08:26
637
原创 Leetcode 剑指 Offer II 119.最长连续序列
题目难度: 中等今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-03-16 08:28:03
326
原创 Leetcode 剑指 Offer II 118.冗余连接
题目难度: 中等今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-03-08 10:19:11
1091
原创 Leetcode 剑指 Offer II 117.相似字符串组
题目难度: 困难今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
2025-03-02 11:08:32
677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅