AI LifeOS
职业发展白皮书
WP-02 · 第 5

编程面试的核心套路(模式化刷题)

与其刷 500 题不如吃透 15 个模式。系统梳理编程面试高频套路、识别信号、模板与复杂度,配套学习路径。

编程面试的核心套路(模式化刷题)

结论先行:编程面试题目千变万化,底层模式就十几个。会识别"这题属于哪个模式",比盲刷题量更重要。目标是看到题面能在 30 秒内报出候选模式和数据结构。

相关阅读:动态规划系统指南最长递增子序列系统设计面试框架技术面试英语

1. 高频模式速查表

模式识别信号典型题复杂度
双指针有序数组、找配对/去重两数之和 II、三数之和O(n)
滑动窗口连续子数组/子串、最长/最短无重复最长子串O(n)
快慢指针链表环、找中点环形链表、找中位节点O(n)
二分查找有序、"最小的满足…"搜索旋转数组、峰值O(log n)
BFS最短路径、层序岛屿最短路、层遍历O(V+E)
DFS / 回溯排列组合、所有方案全排列、子集、N 皇后指数级
堆 / Top-K"第 K 大/小"、合并有序流前 K 高频、合并 K 链表O(n log k)
哈希表O(1) 查存在/计数两数之和、字母异位词O(n)
前缀和 / 差分区间求和、子数组和和为 K 的子数组O(n)
单调栈/队列"下一个更大/更小"每日温度、柱状图最大矩形O(n)
并查集连通性、分组朋友圈、冗余连接~O(nα)
拓扑排序依赖顺序、有向无环课程表O(V+E)
区间合并/重叠区间合并区间、会议室O(n log n)
动态规划最优子结构、重叠子问题背包、编辑距离、LIS视题而定
Trie前缀匹配、字典单词搜索、自动补全O(L)

2. 怎么"识别模式"

拿到题先问三件事:

  1. 输入结构:有序吗?树/图/链表/矩阵?
  2. 要什么:最短/最长/计数/所有方案/存在性?
  3. 约束规模:n 多大 → 反推目标复杂度(n≤20 可指数;n≤10^3 可 O(n²);n≥10^5 需 O(n log n) 以内)。

信号→模式的常见映射:

  • "连续子数组/子串 + 最长/最短" → 滑动窗口。
  • "有序 + 找某个临界点" → 二分。
  • "所有排列/组合/子集" → 回溯。
  • "第 K 个" → 堆 或 快速选择。
  • "下一个更大" → 单调栈。
  • "依赖/前置条件" → 拓扑排序。
  • "最优 + 可拆成子问题" → DP(见 DP 指南)。

3. 两个模板

滑动窗口(变长)

l = 0; 维护窗口状态
for r in range(n):
    加入 nums[r]
    while 窗口不合法:
        移除 nums[l]; l += 1
    更新答案(r - l + 1)

回溯

def backtrack(path, choices):
    if 满足终止: 记录 path; return
    for c in choices:
        做选择 c
        backtrack(path+[c], 更新后的 choices)
        撤销选择 c

4. 学习路径(效率优先)

  1. 先把上表 15 个模式各吃透 3–5 题,手写模板到肌肉记忆
  2. 每题练"识别→报模式→说复杂度→再写码"的口头流程(面试要边说边写,见 技术面试英语)。
  3. 用间隔重复复盘错题,按模式归类而非按题号。
  4. 后期做限时模拟(35–40 分钟一题含沟通)。

5. 常见陷阱

  • 盲目刷题量,不做模式归纳 → 换个包装就不会。
  • 不先讲思路直接写码 → 面试沟通分丢光。
  • 不报复杂度、不说边界(空、单元素、越界)。
  • 只求 AC 不复盘更优解。

小结

把面试算法当模式匹配问题:吃透十几个套路、练熟模板、练"边说边写",比刷题海高效得多。识别对模式,题目就解决了一大半。