力扣算法解析按专题吃透,不做题海 速查 90 天路线 ⌂ 全部教程

总览算法学习路线与刷题方法

这份解析回答一个很实际的问题:学生党时间不多,怎么把力扣刷出效果。 我们不按「题目编号」讲,也不搞题海——而是按二十四个算法专题组织, 覆盖力扣所有主流算法方向:每个专题先讲透一个核心思想,再挑这个专题里最经典的几道题, 把「为什么想到这个解法」的推理过程写出来,配上逐行注释的 Java 代码。 每道题讲完还紧跟一节「巩固练习」——告诉你接着刷哪几道同技巧的题,趁热打铁。 题不贪多,吃透为止。

适合谁
刚刷力扣 / 面试 / 蓝桥杯·天梯赛备赛
语言
Java(核心语法即可,无需框架)
题目来源
力扣 Hot 100 精选约 70 题 · 每题配巩固练习
建议节奏
每天 1 题 · 一个专题约 1 周

0.1怎么用这份解析

每个专题页的固定结构,看一遍你就知道每一块该拿它干什么:

板块怎么用
核心思想(s1)先用大白话把这个专题「为什么存在」讲清楚。先读它,再做题——否则你只是在背题。
通用模板这类题 80% 都长一个骨架。模板要默写级掌握,不是看懂级。
精选题目(每专题 4 题左右)先自己想 15 分钟 → 看思路推导 → 自己写一遍 → 对比参考代码。顺序不能反。
常见坑每专题总结该类题最高频的 WA / TLE 原因。写完题过一遍,比自己调试省一半时间。
巩固练习(每题末尾)讲完一道题,立刻给你 2~3 道同技巧的相关题目。别跳过——刚建立的思路只有马上再练一次才会变成自己的。
自测题可折叠的问答。能独立答出来,这个专题才算过关。
建议环境:代码全部是 Java(JDK 17+ 语法,含 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 题就通了。
19Trie 前缀树中前缀查询专用结构,模板固定。搜索单词类题目的基础设施。
20并查集中动态连通性专用武器:模板 30 行,却能把一批「分组」难题变简单。
21字符串算法中中心扩展、大数模拟是必修;KMP / Manacher 标注选学,第一次可跳。
22最短路与最小生成树中 → 难承接专题 12 与 20:Dijkstra、Bellman-Ford、Kruskal 三板斧。
23DP 高阶难区间 / 树形 / 状态压缩 DP。DP 面试的真正天花板在这里。
24进阶速览难 · 选学单调队列、LRU 缓存、蓄水池抽样、树状数组——大厂常客,一次见全。
时间紧的最低配置:只刷 4 个 ★ 专题(数组双指针、哈希、二分、树)+ DP 入门, 大约 20 题,应付多数校招一面够了。其余专题按面试方向补;13~24 号专题也可以只看「核心思想 + 模板」过一遍, 见到题知道往哪个专题想,就已经赢过大多数裸面的人。

0.3一道题的正确刷法:五步法

同样一道题,「刷完」和「刷会」差别巨大。按这五步走,一道顶三道:

步骤做什么怎么判断这步过关了
1. 读题 圈出数据范围和约束 能说出:「数据量 n ≤ 10⁵,所以 O(n²) 会超时,目标复杂度 O(n) 或 O(n log n)」。
2. 硬想 15 分钟内不看任何资料 哪怕只想出暴力解也写下来。暴力解是优化的起点,不是丢人的东西。
3. 对思路 看本站该题的「思路推导」部分 合上页面,能用自己的话复述「为什么这个解法可行」,而不是背代码。
4. 手写 不看参考代码,自己写完整并提交 通过所有用例。卡住了允许看一眼,然后从头再写一遍。
5. 复盘 第二天脱稿重写一遍 一次通过。写不出来,说明第 3 步是假懂,回到思路推导。
最重要的一条:第 2 步的 15 分钟不能省。 直接看题解的舒适感,会杀死你建立「解题直觉」的唯一机会。题解的价值在于印证和纠偏, 不在于替代思考。

0.4复杂度:面试官其实在问什么

「说说你这个解法的复杂度」不是背公式,是在问你一件事:你知道你的代码在数据变大时会慢成什么样吗。

一秒钟到底能跑多少次运算

力扣判题机大约每秒执行 10⁷ ~ 10⁸ 次简单操作。拿这个数和题目给的数据范围一比, 你能在写代码之前就知道自己的解法会不会超时:

n 的范围可接受的最高复杂度对应的典型算法
n ≤ 20O(2ⁿ)回溯、状态压缩枚举
n ≤ 500O(n³)三层循环的区间 DP
n ≤ 5000O(n²)两层循环、朴素 DP
n ≤ 10⁵O(n log n)排序、二分、堆
n ≤ 10⁶O(n)双指针、滑动窗口、线性 DP
n 更大 / 10⁹O(log n) 或 O(1)二分、数学公式
实用结论:拿到题先看 n 的范围。n ≤ 10⁵ 而你想到了两层循环?直接放弃, 往双指针 / 哈希 / 二分 / DP 方向想——这本身就是一种解题线索。

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. 这份解析和直接看力扣官方题解有什么区别?

官方题解默认你「已经知道该往哪个方向想」,往往直接给最优解。 本站把从暴力解到最优解的每一步「为什么」补上了:为什么暴力会超时、 哪一层循环是多余的、怎么发现它多余。思路推导部分就是为「看完题解还是不会写」的处境准备的。

开始之前,你应该能回答:「n = 10⁵ 的题,两层循环为什么大概率超时?该往哪几个方向想?」 答案:判题机一秒约 10⁷~10⁸ 次操作,10⁵ 的平方是 10¹⁰,必超时; 该往双指针、哈希、滑动窗口、二分、DP 方向想,把复杂度压到 O(n log n) 以内。 能答上来,就可以进 专题 01 · 数组与双指针 了。