【算法图解】算法面试高频 Top 20
面试刷题不靠数量靠结构。本文把高频题按“滑动窗口、前缀和、双指针、单调栈、并查集、BFS/DFS、最短路、堆、DP”分组,给出每组必会题目清单与背后的套路。
18 分钟阅读
小明
【算法图解】算法面试高频 Top 20
刷题最大的误区是:
- 以为刷得越多越好
但面试高频题其实有明显“分布规律”。
你真正要掌握的是:
- 题型 → 模板 → 迁移
所以这篇文章不是给你 20 道题的答案,而是给你:
- 20 个“最常见的考点入口”
- 以及它们背后的模板
1. 高频题型分组(你要先会模板)
A. 双指针/滑动窗口(4 题)
- 无重复字符的最长子串
- 最小覆盖子串
- 和为 K 的子数组(窗口/前缀和二选一,看是否有负数)
- 盛最多水的容器(双指针)
核心:窗口不变量、左右指针移动条件。
B. 前缀和/差分(3 题)
- 子数组和为 K
- 连续子数组最大和(Kadane)
- 二维区域和查询
核心:pre[j] - pre[i] 等式变形 + Map。
C. 单调栈(3 题)
- 下一个更大元素
- 每日温度
- 柱状图最大矩形
核心:弹栈结算、每元素最多进出一次。
D. 堆/优先队列(2 题)
- Top K 最大/最小
- 合并 K 个有序链表
核心:堆维护当前候选,复杂度 $O(n\log k)$。
E. BFS/DFS(4 题)
- 二叉树层序遍历(BFS)
- 岛屿数量(DFS/BFS)
- 最短路径(无权 BFS)
- 单词接龙(BFS)
核心:visited、防止重复状态。
F. 并查集(2 题)
- 连通块数量
- 冗余连接(检测成环)
核心:路径压缩 + 按秩合并。
G. 动态规划入门(2 题)
- 爬楼梯
- 打家劫舍
核心:状态定义、转移方程、滚动数组。
2. 你该怎么刷?一套 7 天结构化计划
- 第 1~2 天:窗口 + 前缀和(把模板写熟)
- 第 3 天:单调栈 + 堆(各 1~2 题)
- 第 4 天:BFS/DFS(把 visited 与状态建模练熟)
- 第 5 天:并查集(把 find/union 写到肌肉记忆)
- 第 6~7 天:DP 入门(状态/转移/优化)
每题要求:
- 先口述模板
- 再写代码
- 最后复盘“为什么这样移动指针/为什么这样定义状态”
3. 面试现场答题的 3 个技巧
- 先问清楚约束:是否有负数?是否要最短?数据规模?
- 先讲模板:我会用窗口/前缀和/单调栈…
- 写完后补复杂度与边界条件
总结
- 高频题不靠背答案,靠模板迁移。
- 这 20 个入口覆盖了大多数一面/二面算法题。
如果你愿意,我可以按这个 Top 20 继续扩展:每一题单独写一篇“图解+模板+易错点”。