
hot100
文章平均质量分 86
六月五日
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
53. 最大子数组和
特性暴力解法 (方法一)动态规划 (方法二)分治法 (方法三)核心思想枚举所有子数组动态规划,贪心选择分而治之,合并解时间复杂度O(n²)O(n)(最优)O(n log n)空间复杂度O(1)O(1)(最优)O(log n) (递归栈)优点逻辑简单效率最高,实用性最强思路巧妙,可扩展性强缺点效率低下,会超时思想相对抽象实现复杂,常数因子较大推荐度仅用于理解问题面试和生产环境首选用于学习和拓展思路结论:动态规划(Kadane’s Algorithm)是解决此问题的不二之选。原创 2025-10-07 20:50:34 · 548 阅读 · 0 评论 -
509. 斐波那契数
特性纯递归 (方法一)带备忘录的递归 (方法二)动态规划 (数组) (方法三)动态规划 (变量) (方法四)核心思想直接递归递归 + 缓存迭代 + 数组存储迭代 + 变量存储时间复杂度O(2ⁿ)O(n)O(n)O(n)空间复杂度O(n) (栈)O(n) (栈+备忘录)O(n) (数组)O(1)(变量)优点代码极简时间效率高时间效率高,无栈溢出时间和空间效率都最高缺点效率极低有栈溢出风险空间开销较大逻辑稍复杂推荐度仅用于理解递归用于理解动态规划思想用于理解自底向上DP。原创 2025-10-07 20:48:16 · 382 阅读 · 0 评论 -
415. 字符串相加
特性字符串拼接法 (方法一)列表优化法 (方法二)核心逻辑模拟竖式加法模拟竖式加法时间复杂度空间复杂度性能较低,存在大量字符串复制较高,列表 append 效率高代码简洁度非常简洁简洁推荐度基础理解面试/生产首选两种方法的核心算法都是模拟竖式加法,这是解决问题的唯一途径。方法二(列表优化法)是最高效且最推荐的解法,因为它在算法复杂度不变的情况下,通过利用更高效的数据结构(列表)提升了实际运行性能。原创 2025-10-07 20:46:18 · 278 阅读 · 0 评论 -
20. 有效的括号
判断括号有效的核心是“匹配规则”:左括号必须与相同类型的右括号闭合,且顺序正确(后开的左括号要先闭合,类似栈的“后进先出”逻辑)。这是解决括号匹配问题的经典解法,利用栈的“后进先出”特性匹配括号,用哈希表存储括号的对应关系,让代码更简洁。与方法一一致,时间O(n),空间O(n);但代码可读性和扩展性较差(若新增括号类型,需修改大量条件判断)。若对哈希表不熟悉,可直接用条件判断区分括号类型,逻辑与方法一一致,但代码稍繁琐。判断左括号类型,右括号匹配时直接对比栈顶元素。原创 2025-10-07 20:44:49 · 206 阅读 · 0 评论 -
461. 汉明距离
特性逐位比较法 (方法一)异或运算法 (方法二)核心思想遍历每一位,直接比较利用异或找出差异位,再统计时间复杂度O(1) (固定32次循环)O(1) (循环次数等于差异位个数)空间复杂度O(1)O(1)代码简洁度一般极高优点逻辑直观,易于理解效率更高,代码更优雅,体现对位运算的深刻理解缺点代码稍显繁琐,循环次数固定需要理解n & (n-1)的技巧结论:方法一是一个非常可靠的基础解法,确保你能解决问题。方法二是最高效、最推荐的解法。原创 2025-10-07 20:43:13 · 345 阅读 · 0 评论 -
338. 比特位计数
基础思路是对每个数单独计算1的个数,但进阶要求是线性时间,这需要利用「动态规划」思想,通过已计算的结果推导新结果,避免重复计算。另一种动态规划思路,利用「当前数的1的个数 = 减去最高有效位后的数的1的个数 + 1」的规律,核心是找到每个数的「最高有效位」(即二进制中最高位的1对应的数值,如。这是满足线性时间的核心解法,利用「当前数的1的个数 = 去掉最低位后的数的1的个数 + 最低位是否为1」的规律,通过动态规划复用已计算结果。逐个计算二进制中1的个数,核心是通过「右移+与运算」统计1的数量。原创 2025-10-07 20:41:38 · 400 阅读 · 0 评论 -
136. 只出现一次的数字
关键约束是“线性时间”和“常量空间”,这意味着不能用时间复杂度超过O(n)的算法,也不能用依赖数组长度的额外空间(如哈希表存储所有元素)。根据特性推导:数组中所有元素异或后,出现两次的元素会因“自反性”抵消为0,最终结果即为“只出现一次的元素”(0与该元素异或,结果为元素自身)。利用“两倍的所有唯一元素和 - 数组总和 = 唯一出现一次的元素”这一数学特性,减少哈希表的空间占用,但仍需存储唯一元素。相比哈希表,代码更简洁,但本质仍是用额外空间存储唯一元素,未满足题目核心约束,属于过渡解法。原创 2025-10-07 20:39:42 · 350 阅读 · 0 评论 -
876. 链表的中间结点
核心是找到链表中间节点,且存在两个中间节点时返回第二个(如链表长度为6,中间节点是第3和第4个,返回第4个)。链表无法直接获取长度,需通过遍历或特殊技巧定位中间位置。这是最容易想到的解法,先统计链表长度,再根据长度计算中间节点的位置,最后二次遍历找到目标节点。这是链表问题中定位中间节点的经典技巧,通过“快慢指针”一次遍历即可找到中间节点,效率更高。缺点是需要遍历链表两次,相比最优解多一次遍历。,一次遍历即可完成目标,时间和空间效率都达到极致,是链表中间节点定位的标准解法。原创 2025-10-07 20:37:46 · 588 阅读 · 0 评论 -
027. 回文链表
回文链表的核心是“正读和反读的节点序列完全一致”。由于链表无法像数组一样直接随机访问,需通过特殊手段处理“反读”的需求,这是解题的关键。这是最优解法,既满足时间要求,又实现了 O(1) 空间,同时通过“恢复原链表”保证了代码的健壮性,是面试中推荐的最终写法。这是满足进阶要求的核心解法,通过“找中点 + 反转后半段 + 双指针对比”三个步骤,实现 O(1) 空间复杂度。这是最容易想到的解法,利用数组的随机访问特性,将链表的“正读”和“反读”转化为数组的首尾对比。优点是逻辑简单、不易出错,适合快速解题;原创 2025-10-07 20:35:51 · 517 阅读 · 0 评论 -
024. 反转链表
递归法的核心是“分而治之”:将“反转整个链表”拆解为“反转当前节点 + 反转剩余链表”,利用递归栈保存未处理的节点状态,代码更简洁,但空间复杂度依赖递归深度。迭代法是最直观的实现,通过三个指针逐步遍历链表,逐个反转节点的指向,空间复杂度仅为 O(1),是工程中更常用的高效解法。指向后一个节点,反转后需指向前一个节点。需要注意处理链表为空或只有一个节点的边界情况,以及避免指针丢失导致链表断裂。反转链表的核心是“改变节点的指针方向”:原本每个节点的。原创 2025-10-07 20:34:15 · 245 阅读 · 0 评论 -
160. 相交链表
特性哈希表法 (方法一)双指针法 (方法二)时间复杂度O(m + n)O(m + n)空间复杂度O(m) 或 O(n)O(1)(最优)优点逻辑简单直观,易于理解和实现空间效率极高,算法设计巧妙缺点空间开销较大算法思想相对不直观,需要思考才能理解其正确性结论:哈希表法是一个简单可靠的解决方案,适合在对空间复杂度要求不高的场景下使用。双指针法是最高效最推荐的解法。在面试中,能够写出这个算法并解释其原理,会充分展示你对算法设计的深刻理解和创新能力。先消除两个链表的长度差,再同步遍历找交点。原创 2025-10-07 20:32:27 · 500 阅读 · 0 评论 -
141. 环形链表
特性哈希表法 (方法一)龟兔赛跑算法 (方法二)时间复杂度O(n)O(n)空间复杂度O(n)O(1)(最优)优点逻辑简单直观,易于理解和实现空间效率极高,是解决此类问题的经典方法缺点空间开销较大算法思想相对不那么直观,需要思考才能理解其正确性结论:哈希表法是入门者最容易想到的正确解法,能解决问题,但不是最优。龟兔赛跑算法是最高效最推荐的解法。在面试中,能够写出这个算法并解释其原理,会给面试官留下非常深刻的印象,是解决环形链表问题的必备技能。原创 2025-10-06 22:49:38 · 509 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
特性迭代法 (方法一)递归法 (方法二)时间复杂度O(n)O(n)空间复杂度O(1)(最优)O(n) (调用栈)优点空间效率高,无栈溢出风险代码极其简洁,逻辑优美缺点代码逻辑相对繁琐一点空间开销大,可能栈溢出结论:迭代法是最高效和最推荐的解法,尤其是在处理大型数据结构时。递归法是一种非常好的思维锻炼,能展示你对递归的深刻理解。在面试中,能够提供两种解法并分析它们的优劣,会是一个非常加分的表现。原创 2025-10-06 22:46:42 · 348 阅读 · 0 评论 -
21. 合并两个有序链表
特性迭代法 (方法一)递归法 (方法二)时间复杂度O(m + n)O(m + n)空间复杂度O(1)(最优)O(m + n) (调用栈)优点空间效率高,无栈溢出风险代码简洁,逻辑直观缺点代码稍显繁琐空间开销大,可能栈溢出结论:迭代法是最高效的解法,因为它的空间复杂度是 O(1),在性能和内存使用上都是最佳选择,尤其适合处理大规模数据。递归法是一种非常优雅的备选方案,能很好地展示编程者对递归思想的掌握。在面试中,能够写出两种解法并清晰地对比它们的优劣,会给面试官留下非常深刻的印象。原创 2025-10-06 22:44:56 · 586 阅读 · 0 评论 -
21. 合并两个有序链表
特性迭代法 (方法一)递归法 (方法二)时间复杂度O(m + n)O(m + n)空间复杂度O(1)(最优)O(m + n) (调用栈)优点空间效率高,无栈溢出风险代码简洁,逻辑直观缺点代码稍显繁琐空间开销大,可能栈溢出结论:迭代法是最高效的解法,因为它的空间复杂度是 O(1),在性能和内存使用上都是最佳选择,尤其适合处理大规模数据。递归法是一种非常优雅的备选方案,能很好地展示编程者对递归思想的掌握。在面试中,能够写出两种解法并清晰地对比它们的优劣,会给面试官留下非常深刻的印象。原创 2025-10-06 22:42:59 · 741 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
我们从最直观的解法开始,逐步深入,直到找到满足 O(n) 时间复杂度和 O(1) 空间复杂度的最优解。原创 2025-10-06 22:40:32 · 479 阅读 · 0 评论 -
88. 合并两个有序数组
我们从最基础的版本开始,一步步优化,直到找到最高效的解法。这个问题的核心是“原地修改 nums1 数组”。原创 2025-10-06 22:38:33 · 290 阅读 · 0 评论 -
70. 爬楼梯
记忆化搜索本质是“递归 + 缓存”,既保留了递归的直观性,又解决了纯递归效率低的问题。字典/数组方案适合理解“缓存”的本质;装饰器方案适合实际写代码(简洁高效,不易出错)。把记忆化搜索转化为迭代版的动态规划迭代版可以进一步优化空间,把空间复杂度从 O(n) 降到 O(1)。我们来讲解迭代版动态规划解法。它的核心是“用循环代替递归,用变量/数组存储中间结果”,不仅时间复杂度保持 O(n),还能把空间复杂度从 O(n) 优化到 O(1),是工程中更常用的高效方案。原创 2025-10-06 22:34:39 · 496 阅读 · 0 评论 -
双指针移动零1
【代码】双指针移动零1。原创 2025-10-06 22:16:05 · 35 阅读 · 0 评论 -
两数之和1
让我们来分解一下inumcomplementnumcomplementseen220所以,当我们发现complement在seencomplementcomplementinum因此,返回的是一个包含的列表,完全符合题目的要求。原创 2025-10-06 22:08:53 · 274 阅读 · 0 评论