算法专题:面试刷题路线、核心模板与 LeetCode 高频题
这是算法模块的学习地图。它把全部主题按依赖关系分成四层,给出推荐学习顺序,并用一句话说明每个主题解决什么问题,适合规划第一轮学习和面试前查漏补缺。
第一层:基础工具
这一层不直接产出算法,但决定后面所有题的实现质量。
- 复杂度分析:用 Big O 在写代码之前判断方案是否可行,是一切优化的度量衡。
- 数组与字符串:下标、区间与原地修改,承载双指针、前缀和等基础技巧。
- 链表:纯指针操作,训练手写代码时对空节点与边界的控制。
- 栈与队列:表达顺序约束——栈处理嵌套与未完成状态,队列处理层次与到达顺序。
- 哈希表:用空间换平均常数查找,核心功夫在 key 的设计。
第二层:搜索与枚举
这一层开始解决”在解空间里找答案”的问题。
- 排序:快排、归并、堆排的过程与稳定性,是许多算法的前置步骤。
- 二分查找:利用单调性每次排除一半,并能从数组推广到答案空间。
- DFS 与 BFS:显式与隐式图的两种遍历;BFS 额外承担无权最短路的职责。
- 树:递归遍历与自底向上的信息汇总,二叉搜索树再叠加有序性。
第三层:决策与优化
这一层处理”从多种选择中找最优或全部方案”的问题。
- 回溯:沿决策树枚举所有方案,用剪枝压缩搜索空间。
- 贪心:每步做可证明安全的局部选择,通常先排序再找策略。
- 动态规划:缓存重复子问题,成败在状态定义与遍历顺序。
- 位运算:异或消去、位掩码枚举等底层技巧,常作为其他题的加速手段。
第四层:进阶结构
这一层是前两层的组合与强化,直接对应高频专题。
- 堆与 Top K:持续维护极值,覆盖第 K 大、前 K 高频与数据流场景。
- Trie:字符串集合的前缀检索,配合 DFS 做剪枝。
- 并查集:近乎常数时间回答动态连通性问题。
- 图算法:拓扑排序、连通块、最短路,把业务依赖翻译成图模型。
依赖关系
层内与层间有几条关键依赖,理解它们才能解释为什么推荐这个顺序:
- 排序是二分的前置——没有有序性就没有单调性可用。
- DFS 是回溯的载体——回溯本质上是带撤销的 DFS,先会遍历才谈得上剪枝。
- 回溯是动态规划的一条来路——很多 DP 题从记忆化搜索改版而来,先看清重复子问题再设计状态。
- 遍历是图算法的前置——拓扑排序是 BFS 在有向图上的变体,并查集则常用来替代一部分连通性 DFS。
- 哈希表是堆题、前缀和题的常见搭档,应尽早熟练。
推荐学习顺序
按层推进即可:第一层打实现基础,第二层建立遍历框架,第三层练决策与优化,第四层做专题收口。两个例外值得说明:堆可以提到第二层之后立刻学,因为 Top K 在面试中出现频率极高;位运算可以放到任意位置,用时再补。
每个主题的学习产出统一为四样东西:适用信号(什么题目特征提示用它)、不变量(循环或递归中始终保持什么)、标准步骤(模板骨架)、代价(时间与空间复杂度)。做题时先写暴力基线保证正确性,再寻找重复计算或可排除的枚举。错题复盘只回答一个问题:当时为什么没识别出它属于这个模型。
配套的两份题单分别按算法思想和数据结构组织,可在这份地图学完对应主题后直接使用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

