按题型浏览
哈希
用空间换时间:把嵌套查找压成 O(1) 的一次查表。
双指针
两个下标相向或同向移动,把 O(n²) 的枚举优化成 O(n)。
滑动窗口
一段连续区间在序列上滑行,动态维护窗口内的统计量。
子串
连续子数组 / 子串上的前缀和、单调队列与最短覆盖。
普通数组
原地操作与下标映射,考的是对数组本身的理解。
矩阵
二维下标上的四种遍历、原地变换与边界收缩。
链表
指针操作与哨兵节点,断链顺序决定代码是否正确。
二叉树
递归定义的结构,遍历顺序往往就是解法本身。
图论
网格与依赖关系上的 DFS / BFS / 拓扑排序。
回溯
在决策树上「选择 → 递归 → 撤销」,用剪枝去掉废枝。
二分查找
在单调性上收缩区间,写对边界比写对思路更难。
栈
后进先出:处理配对、嵌套,以及「下一个更大元素」。
堆
用优先队列维护动态最值,把排序换成 O(log n) 插入。
贪心算法
每步取局部最优,代价是必须先想清楚它为什么不会错过全局最优。
动态规划
定义状态、写转移方程,用子问题的答案拼出原问题。
多维动态规划
两维以上状态的 DP,常见于字符串匹配与网格路径。
技巧
位运算、摩尔投票、原地哈希——想通了就几行代码的巧解。
阅读建议
- 先看题面自己想,别急着往下翻。
- 读思路时遇到「指针怎么动」「表怎么填」的地方,图就在那段话后面,可以逐步回放。
- 想清楚之后再看代码:代码区能跟着演示一起走,高亮的就是当前执行的那几行。