| title |
算法专题:面试刷题路线、核心模板与 LeetCode 高频题 |
| description |
算法面试复习路线,涵盖复杂度分析、二分、双指针、滑动窗口、DFS/BFS、回溯、动态规划、贪心、Top K、字符串、链表、排序和 LeetCode 高频题。 |
| category |
计算机基础 |
| tag |
|
| sidebar |
false |
| sitemap |
| changefreq |
priority |
weekly |
0.9 |
|
| head |
meta |
| name |
content |
keywords |
算法,算法面试题,LeetCode,刷题路线,二分查找,双指针,滑动窗口,DFS,BFS,回溯,动态规划,贪心,TopK,排序算法,字符串算法,链表算法,后端面试 |
|
|
|
这份 算法专题 不是按教材顺序堆知识点,而是按面试刷题的真实路径整理:先搞清复杂度,再掌握二分、双指针、滑动窗口、DFS/BFS、回溯、动态规划、贪心、Top K 这些高频模板,最后用字符串、链表、排序和 LeetCode 题单做复盘。
算法题准备到后面,很容易陷入一个状态:题刷了不少,但换个条件就卡住。原因通常不是题量不够,而是没有把题目归到模板里。面试时真正有用的是:看到题目后能判断它像哪类问题,先写出可工作的版本,再解释复杂度和边界处理。
- 正在准备校招、社招算法题,希望按题型系统刷 LeetCode 的同学。
- 已经刷过一些题,但复盘时说不清“这题为什么这么做”的读者。
- 数据结构基础还可以,但缺少算法模板和边界处理经验的后端开发者。
- 面试前只有 7 到 30 天,需要快速找回手感的工程师。
算法面试一般不只是看你能不能 AC 一道题,更多是在看 4 件事:
| 考察点 |
面试里的具体表现 |
复习时要做什么 |
| 题型识别 |
这题是二分、滑动窗口、回溯还是 DP |
按题型刷,不要完全随机刷 |
| 代码稳定性 |
边界、空指针、下标、循环条件是否可靠 |
每个模板准备 2 到 3 个边界样例 |
| 复杂度表达 |
能否说清时间复杂度和空间复杂度 |
每做完一题都写复杂度 |
| 迁移能力 |
条件变化后能否改模板 |
一类题至少刷基础题和变体题 |
如果只能记一句话:先按题型建模板,再用代表题练迁移。
- 时间复杂度和空间复杂度面试指南:先把 Big O、递归复杂度和常见误判讲清楚。
- 二分查找面试题总结:练基础二分、左右边界和答案二分。
- 双指针与滑动窗口面试题总结:解决数组、字符串、链表里的高频题。
- DFS 与 BFS 面试题总结:掌握树、图、矩阵搜索和层序遍历。
- 回溯算法面试题总结:集中处理组合、排列、子集和棋盘问题。
- 动态规划面试题总结:从状态定义和转移方程入手,不靠背题。
- 贪心算法面试题总结 和 Top K 问题面试题总结:补齐排序贪心、堆、快排分区和桶计数。
- 几道常见的字符串算法题、几道常见的链表算法题、十大经典排序算法总结:按专题做面试前复盘。
时间很紧时,不建议从难题开始。7 天路线的目标是恢复模板和手写稳定性:
| 天数 |
重点 |
建议动作 |
| 第 1 天 |
复杂度 + 排序 |
复盘 Big O、快排、归并、堆排序和稳定性 |
| 第 2 天 |
二分 + 双指针 |
写左右边界模板、两数之和、三数之和、删除重复项 |
| 第 3 天 |
滑动窗口 + 字符串 |
写最长无重复子串、最小覆盖子串、回文相关题 |
| 第 4 天 |
链表 |
写反转链表、环形链表、删除倒数第 N 个节点 |
| 第 5 天 |
树和 BFS |
写前中后序遍历、层序遍历、最近公共祖先 |
| 第 6 天 |
回溯 + DP |
写子集、组合、零钱兑换、最长递增子序列 |
| 第 7 天 |
Top K + 复盘 |
写第 K 大、前 K 高频,整理错题和边界样例 |
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 用堆、快排分区还是桶计数,怎么选?
- 排序算法的稳定性、原地排序、最好/最坏复杂度分别是什么?