算法面试的核心不是刷了多少题,而是有没有框架思维——能快速把陌生题归入已知套路,再用该套路的”标准动作”展开。本页是对 13 个套路节点的总览,解释它们从何而来、彼此如何联系、以及怎样用它们准备面试。

认识 13 个套路

它们从何而来

面试算法题看似千变万化,但按使用的数据结构 + 算法思想可以归为有限的几类。13 个套路节点就是把 LeetCode 上所有高频题按这个标准聚类得到的最小全集。

聚类依据套路
线性遍历 + 原地操作数组与字符串双指针与滑动窗口
特殊线性结构链表栈与队列哈希表
有序性上的查找优化二分查找排序与堆
树/图结构二叉树图论字典树
穷举搜索回溯动态规划与贪心
位与数学技巧位运算数学

套路之间的依赖关系

一部分套路是另一部分套路的基础,认识这种依赖可以制订更合理的学习顺序:

先掌握:数组与字符串、链表、栈与队列、哈希表 —— 它们是最基础的数据结构,几乎所有题都会用到。

再学习:二叉树、双指针与滑动窗口、二分查找、排序与堆 —— 这些是基础结构上的”算法组合”,面试高频区。

最后深入:回溯、动态规划与贪心、图论、字典树 —— 这些需要前序基础,也是区分面试水平的关键。

位运算与数学作为独立技巧穿插使用,不依赖前序套路。

从数组到一切

labuladong 的核心洞见:数据结构只有两种基本形态——数组(连续存储)和链表(链式存储),其余全是它们的封装或变种。

栈/队列 = 受限访问的链表或数组
二叉树 = 带有两个 next 指针的链表
图 = 允许有环且允许多父节点的二叉树
哈希表 = 数组 + 哈希函数(解决冲突用链表或树)
堆 = 用数组表示的完全二叉树
字典树 = 多叉树(用数组或哈希表存子节点指针)

理解了这条主线,遇到任何”偏门数据结构”都能快速把它拆回最基本形态来思考。

框架思维

遍历框架:所有算法题的出发点

labulaodng 认为,无论题目多复杂,最终代码形态不外乎两种:

线性遍历(for/while 循环):

// 数组遍历
for (int i = 0; i < arr.length; i++) { ... }
 
// 链表遍历
while (head != null) { ...; head = head.next; }

递归遍历(树/图/回溯/DP 的通用框架):

void traverse(TreeNode root) {
    // 前序:进入节点时
    traverse(root.left);
    // 中序:左子树返回后
    traverse(root.right);
    // 后序:右子树返回后
}

这个框架稍加变形就覆盖了绝大部分算法题型:

变体做法
DFS/BFS二叉树遍历加一个 visited 集合
回溯前序做选择,后序撤销选择
动态规划返回值变成子问题的解,加备忘录优化
图遍历二叉树遍历加 visited 处理环

空间换时间

算法优化的本质几乎都是空间换时间:

  • 哈希表:用 O(n) 空间把查找从 O(n) 降到 O(1)
  • 前缀和:用 O(n) 空间把区间查询从 O(n) 降到 O(1)
  • 动态规划:用 O(n) 或 O(n²) 空间避免指数级重复计算
  • 堆:用 O(n) 空间把 TopK 的排序从 O(n log n) 降到 O(n log k)

面试时先写暴力解,然后问自己”这里能不能用空间换时间”,往往就是最优解的入口。

刷题方法论

五步做题法(参考 labuladong 解法框架)

  1. 理解题目:用自己的话复述输入/输出/约束
  2. 举例子:画图推演小规模 case
  3. 暴力解:先写出能运行的版本,说复杂度
  4. 优化:用框架识别套路 → 套用该套路的标准解法
  5. 检查:边界条件(空/单个元素/全相同/极大值)

数据规模反推复杂度

数据规模可接受复杂度可能套路
n ≤ 20O(2ⁿ) / O(n!)回溯 + 剪枝
n ≤ 10³O(n²)双层循环 DP、暴力
n ≤ 10⁵O(n log n)排序、二分、分治
n ≤ 10⁶O(n)哈希、双指针、单调栈
n ≤ 10⁹O(log n)二分、快速幂、跳表

面试常见误区

  • 上来就写最优解(不给面试官递进空间):先讲暴力再优化
  • 不举例子:口头推演 edge case 比写代码更重要
  • 忽略边界条件:空输入 / 单元素 / 溢出
  • 不分析复杂度:必须说时间 + 空间
  • 写出来就不管了:跑个例子验证一遍

推荐学习路径

按轮次刷

轮次目标套路
第一轮建立基础数组与字符串、链表、栈与队列、哈希表
第二轮高频必会二叉树、双指针与滑动窗口、二分查找、排序与堆
第三轮突破进阶回溯、动态规划与贪心、图论
补充专项补全字典树、位运算、数学

逐套路的标准流程

  1. 先读套路页顶部”为什么这些题是同一类”——理解聚类逻辑
  2. 做代表题(套路页里高频标记 ★★★★★ 的):不看答案自己写,卡住 15 分钟再看
  3. 横向做变式题(同技术词下的其他题):验证是否理解了模式
  4. 总结:用自己的话写一段”这类题的标志特征 + 通用解法框架”

参考资源