总览算法学习路线与刷题方法
这份解析回答一个很实际的问题:学生党时间不多,怎么把力扣刷出效果。 我们不按「题目编号」讲,也不搞题海——而是按二十四个算法专题组织, 覆盖力扣所有主流算法方向:每个专题先讲透一个核心思想,再挑这个专题里最经典的几道题, 把「为什么想到这个解法」的推理过程写出来,配上逐行注释的 Java 代码。 每道题讲完还紧跟一节「巩固练习」——告诉你接着刷哪几道同技巧的题,趁热打铁。 题不贪多,吃透为止。
0.1怎么用这份解析
每个专题页的固定结构,看一遍你就知道每一块该拿它干什么:
| 板块 | 怎么用 |
|---|---|
| 核心思想(s1) | 先用大白话把这个专题「为什么存在」讲清楚。先读它,再做题——否则你只是在背题。 |
| 通用模板 | 这类题 80% 都长一个骨架。模板要默写级掌握,不是看懂级。 |
| 精选题目(每专题 4 题左右) | 先自己想 15 分钟 → 看思路推导 → 自己写一遍 → 对比参考代码。顺序不能反。 |
| 常见坑 | 每专题总结该类题最高频的 WA / TLE 原因。写完题过一遍,比自己调试省一半时间。 |
| 巩固练习(每题末尾) | 讲完一道题,立刻给你 2~3 道同技巧的相关题目。别跳过——刚建立的思路只有马上再练一次才会变成自己的。 |
| 自测题 | 可折叠的问答。能独立答出来,这个专题才算过关。 |
var 和 record 的少量使用)。
边看边在力扣的在线编辑器里敲一遍——复制粘贴不算刷过题,指法也是肌肉记忆的一部分。
0.2二十四个专题的推荐顺序
专题之间有依赖关系,不要乱序刷。下面是推荐路线,标 ★ 的是面试出现频率最高的四个; 13~24 号专题在前 12 个学完后按方向选学,全部覆盖力扣主流算法标签:
| 顺序 | 专题 | 难度曲线 | 为什么排在这里 |
|---|---|---|---|
| 1 | 数组与双指针 ★ | 易 → 中 | 数组是一切数据结构的载体;双指针是最基础的「降复杂度」思想。 |
| 2 | 哈希表 ★ | 易 → 中 | 学会用 O(1) 查找换掉一层循环——几乎每道中等题都会用到。 |
| 3 | 滑动窗口 | 中 | 双指针 + 哈希的组合拳。不学前两章直接看会懵。 |
| 4 | 二分查找 ★ | 易 → 中 | 看似简单,边界处理是重灾区。模板必须默写级。 |
| 5 | 链表 | 易 → 中 | 纯指针操作,考的是细心。虚拟头节点一招吃遍大半链表题。 |
| 6 | 栈与队列 | 易 → 中 | 引入「单调栈」这个新武器,为后面的图遍历做铺垫。 |
| 7 | 二叉树 ★ | 易 → 中 | 递归思维的主战场。树学不会,回溯和 DP 都悬。 |
| 8 | 递归与回溯 | 中 | 有了树的递归基础,回溯只是「多了一步撤销」。 |
| 9 | 动态规划(入门) | 中 | 从「斐波那契直觉」入手,重点建立状态转移的思维。 |
| 10 | 动态规划(进阶) | 中 → 难 | 子序列与背包两大主线。DP 面试的天花板都在这两类。 |
| 11 | 贪心算法 | 中 | 需要 DP 作对比,才知道「贪心为什么敢贪」。 |
| 12 | 图论入门 | 中 | BFS / DFS 在矩阵题里的形态,拓扑排序收尾。够用即可,不是图论课。 |
| 13 | 前缀和与差分 | 易 → 中 | 「一次减法换掉一层循环」。区间和、区间改量的题见一个拿一个。 |
| 14 | 位运算 | 易 | 几个固定技巧背下来,性价比最高的一章。只出现一次的数字系列是常客。 |
| 15 | 数学与模拟 | 易 → 中 | 没有套路、考观察与实现。训练「把想法准确写成代码」的基本功。 |
| 16 | 排序与分治 | 易 → 中 | 自定义比较器是硬技能;快速选择、归并求逆序对体现分治思想。 |
| 17 | 堆(优先队列) | 中 | Top K 类题的标准答案。Java 的 PriorityQueue 用法一次讲清。 |
| 18 | 二叉搜索树 | 中 | 承接专题 07:抓住「中序遍历即有序」这一条性质,多数 BST 题就通了。 |
| 19 | Trie 前缀树 | 中 | 前缀查询专用结构,模板固定。搜索单词类题目的基础设施。 |
| 20 | 并查集 | 中 | 动态连通性专用武器:模板 30 行,却能把一批「分组」难题变简单。 |
| 21 | 字符串算法 | 中 | 中心扩展、大数模拟是必修;KMP / Manacher 标注选学,第一次可跳。 |
| 22 | 最短路与最小生成树 | 中 → 难 | 承接专题 12 与 20:Dijkstra、Bellman-Ford、Kruskal 三板斧。 |
| 23 | DP 高阶 | 难 | 区间 / 树形 / 状态压缩 DP。DP 面试的真正天花板在这里。 |
| 24 | 进阶速览 | 难 · 选学 | 单调队列、LRU 缓存、蓄水池抽样、树状数组——大厂常客,一次见全。 |
0.3一道题的正确刷法:五步法
同样一道题,「刷完」和「刷会」差别巨大。按这五步走,一道顶三道:
| 步骤 | 做什么 | 怎么判断这步过关了 |
|---|---|---|
| 1. 读题 | 圈出数据范围和约束 | 能说出:「数据量 n ≤ 10⁵,所以 O(n²) 会超时,目标复杂度 O(n) 或 O(n log n)」。 |
| 2. 硬想 | 15 分钟内不看任何资料 | 哪怕只想出暴力解也写下来。暴力解是优化的起点,不是丢人的东西。 |
| 3. 对思路 | 看本站该题的「思路推导」部分 | 合上页面,能用自己的话复述「为什么这个解法可行」,而不是背代码。 |
| 4. 手写 | 不看参考代码,自己写完整并提交 | 通过所有用例。卡住了允许看一眼,然后从头再写一遍。 |
| 5. 复盘 | 第二天脱稿重写一遍 | 一次通过。写不出来,说明第 3 步是假懂,回到思路推导。 |
0.4复杂度:面试官其实在问什么
「说说你这个解法的复杂度」不是背公式,是在问你一件事:你知道你的代码在数据变大时会慢成什么样吗。
一秒钟到底能跑多少次运算
力扣判题机大约每秒执行 10⁷ ~ 10⁸ 次简单操作。拿这个数和题目给的数据范围一比, 你能在写代码之前就知道自己的解法会不会超时:
| n 的范围 | 可接受的最高复杂度 | 对应的典型算法 |
|---|---|---|
| n ≤ 20 | O(2ⁿ) | 回溯、状态压缩枚举 |
| n ≤ 500 | O(n³) | 三层循环的区间 DP |
| n ≤ 5000 | O(n²) | 两层循环、朴素 DP |
| n ≤ 10⁵ | O(n log n) | 排序、二分、堆 |
| n ≤ 10⁶ | O(n) | 双指针、滑动窗口、线性 DP |
| n 更大 / 10⁹ | O(log n) 或 O(1) | 二分、数学公式 |
0.5大多数人的三个误区
- 误区一:按题号顺序从第 1 题刷起。力扣前几百题没有难度和专题的规律, 你会在「随机难度」里来回受挫。正确做法是按专题刷——同一类题连着做, 思路会互相强化(本站二十四个专题就是这个目的)。
- 误区二:看得懂 = 会了。看题解时「哦这么简单」的感觉是错觉。 检验标准只有一个:三天后脱稿重写一次通过。这是本站每个自测题都在帮你验证的事。
- 误区三:追求数量。刷 300 道但每道都看题解,不如 60 道每道都走完五步法。 面试官考的是「现场推理」,不是「见过多少题」——当然,高频题该见还是得见(见附录的 90 天路线)。
0.6常见疑问
Q1. 用 Java 刷题会不会比 C++ / Python 吃亏?要不要换语言?
不会。力扣判题对 Java 有 2~3 倍的宽松时限,常规题完全够用。Java 的 Deque、
PriorityQueue、Arrays.sort 覆盖了 95% 的场景(常用 API 见附录 A.2)。
用最熟的语言,把时间花在算法本身——除非你面试的公司明确要求某语言。
Q2. 每天没时间,一天一道够吗?
够,但必须是「走完五步法的一道」,而不是「看过答案的一道」。90 天 ≈ 70~80 道有效题, 覆盖 Hot 100 的核心(路线见附录 A.4)。周末可以加量,但连续性比单日强度重要得多—— 断一周,手感归零。
Q3. 困难题(比如 N 皇后、最小覆盖子串)要不要跳过?
本站保留的少数困难题(如 N 皇后、最小覆盖子串)都是某类模板的「完整形态」—— 中等题只是它的简化版。时间紧可以先跳过,学完该专题的中等题再回头看, 这时你会发现困难题只是「模板 + 更多细节」。
Q4. 这份解析和直接看力扣官方题解有什么区别?
官方题解默认你「已经知道该往哪个方向想」,往往直接给最优解。 本站把从暴力解到最优解的每一步「为什么」补上了:为什么暴力会超时、 哪一层循环是多余的、怎么发现它多余。思路推导部分就是为「看完题解还是不会写」的处境准备的。