【算法图解】算法面试高频 Top 20

面试刷题不靠数量靠结构。本文把高频题按“滑动窗口、前缀和、双指针、单调栈、并查集、BFS/DFS、最短路、堆、DP”分组,给出每组必会题目清单与背后的套路。

18 分钟阅读
小明

【算法图解】算法面试高频 Top 20

刷题最大的误区是:

  • 以为刷得越多越好

但面试高频题其实有明显“分布规律”。

你真正要掌握的是:

  • 题型 → 模板 → 迁移

所以这篇文章不是给你 20 道题的答案,而是给你:

  • 20 个“最常见的考点入口”
  • 以及它们背后的模板

1. 高频题型分组(你要先会模板)

A. 双指针/滑动窗口(4 题)

  1. 无重复字符的最长子串
  2. 最小覆盖子串
  3. 和为 K 的子数组(窗口/前缀和二选一,看是否有负数)
  4. 盛最多水的容器(双指针)

核心:窗口不变量、左右指针移动条件。

B. 前缀和/差分(3 题)

  1. 子数组和为 K
  2. 连续子数组最大和(Kadane)
  3. 二维区域和查询

核心:pre[j] - pre[i] 等式变形 + Map。

C. 单调栈(3 题)

  1. 下一个更大元素
  2. 每日温度
  3. 柱状图最大矩形

核心:弹栈结算、每元素最多进出一次。

D. 堆/优先队列(2 题)

  1. Top K 最大/最小
  2. 合并 K 个有序链表

核心:堆维护当前候选,复杂度 $O(n\log k)$。

E. BFS/DFS(4 题)

  1. 二叉树层序遍历(BFS)
  2. 岛屿数量(DFS/BFS)
  3. 最短路径(无权 BFS)
  4. 单词接龙(BFS)

核心:visited、防止重复状态。

F. 并查集(2 题)

  1. 连通块数量
  2. 冗余连接(检测成环)

核心:路径压缩 + 按秩合并。

G. 动态规划入门(2 题)

  1. 爬楼梯
  2. 打家劫舍

核心:状态定义、转移方程、滚动数组。


2. 你该怎么刷?一套 7 天结构化计划

  • 第 1~2 天:窗口 + 前缀和(把模板写熟)
  • 第 3 天:单调栈 + 堆(各 1~2 题)
  • 第 4 天:BFS/DFS(把 visited 与状态建模练熟)
  • 第 5 天:并查集(把 find/union 写到肌肉记忆)
  • 第 6~7 天:DP 入门(状态/转移/优化)

每题要求:

  • 先口述模板
  • 再写代码
  • 最后复盘“为什么这样移动指针/为什么这样定义状态”

3. 面试现场答题的 3 个技巧

  1. 先问清楚约束:是否有负数?是否要最短?数据规模?
  2. 先讲模板:我会用窗口/前缀和/单调栈…
  3. 写完后补复杂度与边界条件

总结

  • 高频题不靠背答案,靠模板迁移。
  • 这 20 个入口覆盖了大多数一面/二面算法题。

如果你愿意,我可以按这个 Top 20 继续扩展:每一题单独写一篇“图解+模板+易错点”。