持续更新

刷LeetCode

从暴力解到最优解,记录每一道题目背后的思路,代码用 Python。

50 篇文章2 小时阅读
  1. 01
    两数之和
    用哈希表把查找降到 O(1),两数之和的标准解法。
    2026-01-23 · 3 分钟
  2. 02
    回文数
    判断整数回文,字符串反转最简单,数学方法练手动数字操作。
    2026-01-23 · 2 分钟
  3. 03
    有效的字母异位词
    字符频率统计判断异位词,Counter 最简洁。
    2026-01-23 · 3 分钟
  4. 04
    两个数组的交集
    两个数组求交集,Python set 一行搞定。
    2026-01-23 · 2 分钟
  5. 05
    验证回文串
    过滤非字母数字字符后判断回文,双指针法能省掉额外空间。
    2026-02-05 · 2 分钟
  6. 06
    移动零
    快慢双指针原地移动元素,这个模板后面会反复用到。
    2026-01-23 · 2 分钟
  7. 07
    移除元素
    移动零同款快慢双指针,去掉填充、加上返回值。
    2026-01-23 · 2 分钟
  8. 08
    删除有序数组中的重复项
    同样是快慢双指针,保留条件换成了和前一个元素比较。
    2026-01-26 · 2 分钟
  9. 09
    合并两个有序数组
    nums1 末尾有空位,从后往前填才不会覆盖还没处理的数据。
    2026-01-26 · 2 分钟
  10. 10
    区域和检索 - 数组不可变
    数组不变但要多次查询区间和,前缀和预处理换来 O(1) 查询。
    2026-01-29 · 2 分钟
  11. 11
    二分查找
    标准二分查找,左闭右闭区间写法。
    2026-01-29 · 2 分钟
  12. 12
    搜索插入位置
    二分查找的变形,找不到时循环结束的 i 正好是插入位置。
    2026-01-29 · 2 分钟
  13. 13
    爬楼梯
    第一道动态规划题,站在第 n 阶的来路只有两种,方法数直接相加。
    2026-01-29 · 2 分钟
  14. 14
    使用最小花费爬楼梯
    爬楼梯的 DP 变形,方法数换成最小花费,加法换成 min。
    2026-01-29 · 2 分钟
  15. 15
    反转链表
    三指针原地掰转链表方向,是后面链表题的基础操作。
    2026-01-29 · 2 分钟
  16. 16
    合并两个有序链表
    尾插法合并两个有序链表,dummy 节点简化头部处理。
    2026-01-29 · 2 分钟
  17. 17
    环形链表
    快慢指针判断链表有没有环,快指针追上慢指针就是有环。
    2026-01-31 · 2 分钟
  18. 18
    相交链表
    两个链表长度不同导致对不齐,交替遍历能巧妙抹平这个差值。
    2026-01-31 · 2 分钟
  19. 19
    二叉树的最大深度
    树的递归入门,当前节点深度 = 1 + 子树深度的较大值。
    2026-02-05 · 2 分钟
  20. 20
    翻转二叉树
    跟求深度同一个递归骨架,这次是修改树不是查询。
    2026-01-31 · 2 分钟
  21. 21
    对称二叉树
    判断树是否轴对称,需要一个辅助函数同时比较两个节点。
    2026-01-31 · 2 分钟
  22. 22
    路径总和
    递归传递剩余目标值,陷阱是空节点不等于叶子节点。
    2026-02-02 · 2 分钟
  23. 23
    二叉树的直径
    直径不一定过根节点,必须在每个节点递归时都检查一次。
    2026-02-02 · 2 分钟
  24. 24
    相同的树
    双节点递归判断两棵树是否相同,跟对称二叉树是姊妹题。
    2026-02-05 · 2 分钟
  25. 25
    二叉树的深度优先遍历
    前中后序遍历,区别只在根节点什么时候被访问。
    2026-02-05 · 2 分钟
  26. 26
    有效的括号
    括号匹配是后进先出,天然对应栈这个数据结构。
    2026-02-05 · 2 分钟
  27. 27
    二叉树的所有路径
    DFS 收集根到叶的路径,字符串不可变省去了显式回溯。
    2026-02-06 · 2 分钟
  28. 28
    买卖股票的最佳时机
    维护一路走来的历史最低价,每一步顺手更新最大利润。
    2026-02-12 · 2 分钟
  29. 29
    多数元素
    摩尔投票法 O(1) 空间找众数,靠一换一对消的直觉。
    2026-02-12 · 3 分钟
  30. 30
    图像渲染
    网格 DFS 是树 DFS 的自然扩展,2个方向变成4个方向。
    2026-03-01 · 2 分钟
  31. 31
    两数之和 II - 输入有序数组
    数组有序,对撞双指针能把空间从 O(n) 降到 O(1)。
    2026-01-26 · 2 分钟
  32. 32
    长度最小的子数组
    第一次遇到滑动窗口:窗口和不够就扩大,够了就收缩找更短的。
    2026-01-29 · 2 分钟
  33. 33
    环形链表 II
    找到环之后,一个指针回到起点同步走,再次相遇就是环的入口。
    2026-01-31 · 2 分钟
  34. 34
    打家劫舍
    跟爬楼梯同一个 DP 骨架,方案数的加法换成收益的取最大。
    2026-01-31 · 2 分钟
  35. 35
    无重复字符的最长子串
    滑动窗口 + 集合判重,跟最短子数组(209)对比着看。
    2026-02-02 · 2 分钟
  36. 36
    和为K的子数组
    前缀和加哈希表,把子数组求和问题变成两数之和的变体。
    2026-02-02 · 3 分钟
  37. 37
    二叉树的层序遍历
    第一次用 BFS,队列实现一层一层处理。
    2026-02-05 · 2 分钟
  38. 38
    路径总和 II
    跟收集所有路径同一个套路,只是列表可变,要么回溯要么每次传新列表。
    2026-02-06 · 3 分钟
  39. 39
    不同路径
    爬楼梯的二维版,从一维数组扩展成二维网格。
    2026-02-09 · 2 分钟
  40. 40
    最小路径和
    不同路径的进阶版,求和换成求最小代价。
    2026-02-09 · 2 分钟
  41. 41
    不同路径 II
    不同路径加上障碍物,堵住的格子和它连带的后续格子路径数都是 0。
    2026-02-09 · 2 分钟
  42. 42
    零钱兑换
    完全背包 DP,贪心会踩坑,必须把每种硬币数量都试一遍。
    2026-02-09 · 3 分钟
  43. 43
    分割等和子集
    问题转化成能不能凑出 sum/2,用 0/1 背包,倒序遍历保证每个数只用一次。
    2026-02-09 · 3 分钟
  44. 44
    子集
    回溯的入门题,关键是先画决策树,代码只是把树翻译成 Python。
    2026-02-12 · 3 分钟
  45. 45
    全排列
    跟子集同一个回溯框架,区别是能回头选、只在叶子记录。
    2026-02-12 · 2 分钟
  46. 46
    组合
    固定长度的子集——记录时机从每个节点改成只在深度=k 的时候。
    2026-02-12 · 2 分钟
  47. 47
    组合总和
    组合的变体,同一个数能重复选,递归传自己而不是下一个。
    2026-02-12 · 3 分钟
  48. 48
    买卖股票的最佳时机 II
    不限交易次数,反而变简单——贪心吃掉每一段上涨就是最优解。
    2026-02-12 · 2 分钟
  49. 49
    买卖股票的最佳时机 III
    第一次遇到状态机 DP,四个交易阶段各自维护一条状态。
    2026-02-12 · 4 分钟
  50. 50
    买卖股票的最佳时机 IV
    把最多两次交易泛化成最多 k 次,4 个变量变成两个长度 k 的数组。
    2026-02-12 · 2 分钟