算法专题:面试刷题路线、核心模板与 LeetCode 高频题
约 1791 字大约 6 分钟
这份 算法专题 不是按教材顺序堆知识点,而是按面试刷题的真实路径整理:先搞清复杂度,再掌握二分、双指针、滑动窗口、DFS/BFS、回溯、动态规划、贪心、Top K 这些高频模板,最后用字符串、链表、排序和 LeetCode 题单做复盘。
算法题准备到后面,很容易陷入一个状态:题刷了不少,但换个条件就卡住。原因通常不是题量不够,而是没有把题目归到模板里。面试时真正有用的是:看到题目后能判断它像哪类问题,先写出可工作的版本,再解释复杂度和边界处理。
适合谁看
- 正在准备校招、社招算法题,希望按题型系统刷 LeetCode 的同学。
- 已经刷过一些题,但复盘时说不清“这题为什么这么做”的读者。
- 数据结构基础还可以,但缺少算法模板和边界处理经验的后端开发者。
- 面试前只有 7 到 30 天,需要快速找回手感的工程师。
算法面试考什么
算法面试一般不只是看你能不能 AC 一道题,更多是在看 4 件事:
| 考察点 | 面试里的具体表现 | 复习时要做什么 |
|---|---|---|
| 题型识别 | 这题是二分、滑动窗口、回溯还是 DP | 按题型刷,不要完全随机刷 |
| 代码稳定性 | 边界、空指针、下标、循环条件是否可靠 | 每个模板准备 2 到 3 个边界样例 |
| 复杂度表达 | 能否说清时间复杂度和空间复杂度 | 每做完一题都写复杂度 |
| 迁移能力 | 条件变化后能否改模板 | 一类题至少刷基础题和变体题 |
如果只能记一句话:先按题型建模板,再用代表题练迁移。
建议阅读顺序
- 时间复杂度和空间复杂度面试指南:先把 Big O、递归复杂度和常见误判讲清楚。
- 二分查找面试题总结:练基础二分、左右边界和答案二分。
- 双指针与滑动窗口面试题总结:解决数组、字符串、链表里的高频题。
- DFS 与 BFS 面试题总结:掌握树、图、矩阵搜索和层序遍历。
- 回溯算法面试题总结:集中处理组合、排列、子集和棋盘问题。
- 动态规划面试题总结:从状态定义和转移方程入手,不靠背题。
- 贪心算法面试题总结 和 Top K 问题面试题总结:补齐排序贪心、堆、快排分区和桶计数。
- 几道常见的字符串算法题、几道常见的链表算法题、十大经典排序算法总结:按专题做面试前复盘。
核心模板
| 模板 | 识别信号 | 重点文章 |
|---|---|---|
| 二分查找 | 有序、单调、最小可行值、最大可行值 | 二分查找面试题总结 |
| 双指针 | 原地修改、两端收缩、快慢追赶、链表定位 | 双指针与滑动窗口面试题总结 |
| 滑动窗口 | 连续子数组、连续子串、最长/最短窗口 | 双指针与滑动窗口面试题总结 |
| DFS/BFS | 树遍历、图遍历、矩阵连通块、层序最短步数 | DFS 与 BFS 面试题总结 |
| 回溯 | 枚举所有方案、路径选择、组合排列、棋盘约束 | 回溯算法面试题总结 |
| 动态规划 | 最优值、计数、能否到达、子序列、背包 | 动态规划面试题总结 |
| 贪心 | 每一步选择当前最合适的对象,常和排序搭配 | 贪心算法面试题总结 |
| Top K | 第 K 大、前 K 高频、数据流、优先级 | Top K 问题面试题总结 |
7 天速刷路线
时间很紧时,不建议从难题开始。7 天路线的目标是恢复模板和手写稳定性:
| 天数 | 重点 | 建议动作 |
|---|---|---|
| 第 1 天 | 复杂度 + 排序 | 复盘 Big O、快排、归并、堆排序和稳定性 |
| 第 2 天 | 二分 + 双指针 | 写左右边界模板、两数之和、三数之和、删除重复项 |
| 第 3 天 | 滑动窗口 + 字符串 | 写最长无重复子串、最小覆盖子串、回文相关题 |
| 第 4 天 | 链表 | 写反转链表、环形链表、删除倒数第 N 个节点 |
| 第 5 天 | 树和 BFS | 写前中后序遍历、层序遍历、最近公共祖先 |
| 第 6 天 | 回溯 + DP | 写子集、组合、零钱兑换、最长递增子序列 |
| 第 7 天 | Top K + 复盘 | 写第 K 大、前 K 高频,整理错题和边界样例 |
30 天系统路线
30 天路线不用追求每天刷很多题。更靠谱的节奏是:每天 1 到 3 道代表题,题后写 5 行复盘。
| 阶段 | 时间 | 目标 |
|---|---|---|
| 第一阶段 | 第 1 到 5 天 | 复杂度、数组、链表、栈、队列,保证基础模板能手写 |
| 第二阶段 | 第 6 到 12 天 | 二分、双指针、滑动窗口、字符串,重点练边界 |
| 第三阶段 | 第 13 到 18 天 | 树、图、DFS/BFS、并查集,建立搜索题框架 |
| 第四阶段 | 第 19 到 24 天 | 回溯、动态规划、贪心,重点练状态定义和剪枝 |
| 第五阶段 | 第 25 到 30 天 | Top K、排序、综合题和错题复盘,准备面试讲解 |
高频问题自测
- 时间复杂度为什么要看最高阶?递归复杂度怎么算?
- 二分查找的
left < right和left <= right怎么选? - 双指针和滑动窗口有什么区别?
- DFS 和 BFS 分别适合什么问题?什么时候需要
visited? - 回溯和 DFS 是什么关系?剪枝应该放在哪里?
- 动态规划为什么难?状态定义和遍历顺序怎么确定?
- 贪心为什么需要证明?面试中答到什么程度够用?
- Top K 用堆、快排分区还是桶计数,怎么选?
- 排序算法的稳定性、原地排序、最好/最坏复杂度分别是什么?
相关专题
写在最后
如果内容对你有帮助的话,欢迎顺手给 JavaGuide 点一个免费的 Star 支持一下:GitHub | Gitee。
JavaGuide 已持续维护近七年,累计 6100+ 次提交,来自 620+ 位贡献者共同完善。你的 Star、反馈和 PR,都是这个项目继续更新的动力。
如果你正在准备后端/AI 应用开发面试,也可以了解一下我的知识星球,里面包括后端和 AI 实战项目、简历优化、一对一提问和高频考点资料,已经持续维护六年。
