如何科学刷题

为什么要科学刷题

刷题低效,很多时候不是不够努力,而是顺序不对:题目太难,容易频繁受挫;题目太简单,又会陷入机械重复。更稳妥的做法,是让题目难度始终略高于当前水平,在“能思考、能复盘、也能持续推进”的区间里训练。

如果是算法新手,建议先完成 「新」动计划 · 编程入门,先把数组、字符串、哈希、模拟这类基础实现题过一遍,再进入系统化专题训练。

刷题前先记住这几条

  1. 每题先独立思考至少 15 分钟,实在没有方向,再去看题解。
  2. 看题解不是为了“知道答案”,而是为了提炼信号:什么特征对应什么方法,状态怎么定义,不变量是什么,边界怎么处理。
  3. 看懂以后一定要关掉题解,自己重新敲一遍,直到能独立复现。
  4. 每做完一题,最好记下一句总结:下次看到什么条件,应该优先想到什么套路。

方法 A:专题训练

专题训练适合新人建立知识体系,也适合把零散题感整理成稳定方法论。建议先按下面这条主线推进。

核心刷题路线

除动态规划外,默认优先完成难度分 ≤1700 的题目。

顺序 题单 建议先做 备注
0 编程入门 热身即可 有两道数据库题,可以先跳过
1 滑动窗口 定长滑动窗口、不定长滑动窗口 先建立双指针与窗口维护意识
2 二分算法 二分查找 二分答案可以先放后面,别一开始硬啃
3 数据结构 常用枚举技巧、前缀和、栈、队列、堆 这是新手最常用的工具箱
4 链表、树、回溯 二叉树 DFS 用递归建立搜索与树形问题直觉
5 网格图 网格 DFS 继续巩固递归与搜索
6 链表、树、回溯 回溯 训练搜索树建模和剪枝意识
7 动态规划 前六章 是入门门槛,题量不够时可把范围放宽到难度分 ≤2000

配套资源

题单详解

下面把题单按专题大节、小节和具体题目展开。建议优先按上面的核心路线刷,不必一次把所有题目全部做完;每完成一个专题,再回头补相关扩展题,效率通常更高。

滑动窗口与双指针

定长滑动窗口

基础
进阶(选做)
其他(选做)

不定长滑动窗口

越短越合法/求最长/最大
基础
进阶(选做)
越长越合法/求最短/最小
求子数组个数
越短越合法
越长越合法
恰好型滑动窗口
其他(选做)

单序列双指针

反转字符串
相向双指针
同向双指针
背向双指针
原地修改
矩阵上的双指针

双序列双指针

双指针
判断子序列

三指针

分组循环

二分算法

二分查找

基础
进阶

二分答案

求最小
答疑
求最大
二分间接值
最小化最大值
最大化最小值
第 K 小/大

三分法

其他

单调栈

单调栈

基础
进阶

矩形

贡献法

最小字典序

网格图

网格图 DFS

网格图 BFS

网格图 0-1 BFS

综合应用

位运算

基础题

异或(XOR)的性质

与或(AND/OR)的性质

AND/OR LogTrick
GCD LogTrick

拆位 / 贡献法

试填法

恒等式

线性基

思维题

其他

图论算法

图的遍历

深度优先搜索(DFS)
广度优先搜索(BFS)
图论建模 + BFS 最短路

拓扑排序

拓扑排序
在拓扑序上 DP
基环树

最短路

单源最短路:Dijkstra 算法
全源最短路:Floyd 算法

最小生成树

欧拉路径/欧拉回路

强连通分量/双连通分量

二分图染色

网络流

其他

动态规划

入门 DP

爬楼梯
打家劫舍
答疑
最大子数组和(最大子段和)

网格图 DP

基础
进阶

背包

0-1 背包
完全背包
多重背包(选做)
分组背包
树形背包(选做)

经典线性 DP

最长公共子序列(LCS)
基础
进阶
最长递增子序列(LIS)
  • 2407 题:练该小节核心套路。
基础
进阶

划分型 DP

判定能否划分
最优划分
约束划分个数

状态机 DP

买卖股票
基础
进阶

其他线性 DP

一维 DP
不相交区间
子数组 DP
合法子序列 DP
子矩形 DP
多维 DP
计数 DP

区间 DP

最长回文子序列
区间 DP

状态压缩 DP(状压 DP)

排列型状压 DP ① 相邻无关
排列型状压 DP ② 相邻相关
旅行商问题(TSP)
子集状压 DP
轮廓线 DP
SOS DP
其他状压 DP

数位 DP

统计合法元素的数目
统计合法元素的价值总和
其他数位 DP

优化 DP

前缀和优化 DP
单调栈优化 DP
单调队列优化 DP
树状数组/线段树优化 DP
字典树优化 DP
矩阵快速幂优化 DP
斜率优化 DP
WQS 二分优化 DP
其他优化 DP

树形 DP

树的直径
树上最大独立集
树上最小支配集
换根 DP
其他树形 DP

图 DP

博弈 DP

概率/期望 DP

专题:输出具体方案(打印方案)

专题:前后缀分解

专题:把 X 变成 Y

专题:跳跃游戏

其他

常用数据结构

零、常用枚举技巧

枚举右,维护左
基础
进阶
枚举中间
遍历对角线

前缀和

基础
前缀和与哈希表
距离和
状态压缩前缀和
进阶
二维前缀和

差分

一维差分
基础
进阶
二维差分

基础
进阶
邻项消除
合法括号字符串(RBS)
表达式解析
对顶栈

队列

基础
设计
双端队列
单调队列

堆(优先队列)

基础
进阶
第 K 小/大
重排元素
反悔堆
懒删除堆
对顶堆(滑动窗口第 K 小/大)

字典树(trie)

基础
进阶
字典树优化 DP
0-1 字典树(异或字典树)

并查集

基础
进阶
GCD 并查集
数组上的并查集
区间并查集
带权并查集(边权并查集)

树状数组和线段树

树状数组
逆序对
线段树(无区间更新)
Lazy 线段树(有区间更新)
动态开点线段树
可持久化线段树
ST 表(Sparse Table)

伸展树(Splay 树)

根号算法

根号分解(Sqrt Decomposition)
莫队算法
其他

专题:离线算法

编程能力强化训练

Part A
Part B
Part C

数学算法

数论

判断质数
预处理质数(筛质数)
质因数分解
阶乘分解
因子
最大公约数(GCD)
最小公倍数(LCM)
互质
同余
数论分块
其他

组合数学

乘法原理
组合计数
放球问题
容斥原理
生成函数(母函数)

概率期望

博弈论

计算几何

点、线
矩形、多边形
凸包

随机算法

随机数
随机化技巧

杂项

回文数
整数拆分
曼哈顿距离与切比雪夫距离
多项式
快速沃尔什变换(FWT)
摩尔投票法
其他

贪心与思维

贪心策略

从最小/最大开始贪心
单序列配对
双序列配对
从最左/最右开始贪心
划分型贪心
先枚举,再贪心
交换论证法
相邻不同
反悔贪心

区间贪心

不相交区间
区间分组
区间选点
区间覆盖
合并区间
其他区间贪心

字符串贪心

字典序最小/最大
回文串贪心

数学贪心

基础
乘积贪心
排序不等式
均值不等式
中位数贪心
归纳法
其他数学贪心

思维题

从特殊到一般
脑筋急转弯
等价转换
逆向思维
贡献法
两次扫描
分类讨论

构造题

交互题

其他

链表、树与回溯

链表

遍历链表
删除节点
插入节点
反转链表
前后指针
快慢指针
双指针
合并链表
分治
综合应用
其他

二叉树

遍历二叉树
自顶向下 DFS(先序遍历)
自底向上 DFS(后序遍历)
自底向上 DFS:删点
有递有归
二叉树的直径
回溯
最近公共祖先
二叉搜索树
创建二叉树
插入/删除节点
树形 DP
二叉树 BFS
链表+二叉树
N 叉树
其他

一般树

遍历
自顶向下 DFS
自底向上 DFS
有递有归
树的直径
树的拓扑排序
DFS 时间戳
最近公共祖先(LCA)、倍增算法
虚树
树上启发式合并
点分治
树上滑动窗口
其他

回溯

入门回溯
子集型回溯
划分型回溯
组合型回溯
排列型回溯
有重复元素的回溯
搜索
折半枚举

其他递归/分治

字符串

KMP(前缀的后缀)

Z 函数(后缀的前缀)

Manacher 算法(回文串)

字符串哈希

最小表示法

AC 自动机

后缀数组/后缀自动机

子序列自动机

其他

方法 B:随机训练

专题训练的优点是体系化,缺点是你会提前知道题目大致属于什么类型。可一旦到了比赛、笔试或真实面试,题目不会主动告诉你“我是动态规划”还是“我是贪心”。

所以在刷完一轮专题后,建议加入随机训练:

  1. 打开 难度练习
  2. 从自己当前能稳定思考的难度开始,例如 1500 左右
  3. 不看题型标签,先自己判断信号和解法方向
  4. 做完后再复盘:这题为什么应该想到这个模型?

随机训练的核心目标,不是扩题量,而是训练“识别题型”的能力。

方法 C:突击训练

如果已经临近面试,没有很多时间完整刷专题,可以直接做高频面试题单:

  • HOT 100:适合短时间内覆盖最常见的经典题。
  • 面试 150:和 HOT 100 有不少重合,做完前者还有时间再补这一套。

如果时间特别紧,优先保证 HOT 100 的完成度和复盘质量。

常见问题

1. 一个专题完全不会,应该怎么开始?

最稳妥的做法不是一上来硬做,而是先看一遍对应专题的讲解资料,再从低难度题开始做。前 5~10 题的目标不是追求速度,而是建立“这个专题通常长什么样”的感觉。

2. 卡多久再看题解比较合适?

如果 15 分钟后仍然没有方向,可以适当看提示;如果已经有方向,但总在细节上绕圈,可以再坚持一会儿。关键不在于“绝不看题解”,而在于看完以后必须自己独立重写。

3. 动态规划为什么总是学不会?

动态规划本来就是很多人的第一道门槛。它不像滑动窗口那样有明显模板,需要不断练习状态设计、转移来源和初始化细节。入门阶段不要急着追求“秒做”,先把前几类经典模型反复做熟。

4. 怎么根据数据范围大致猜复杂度?

数据范围 常见可接受复杂度 常见方法
n ≤ 10 O(n!) / 组合爆搜 回溯、暴力搜索
n ≤ 20 O(2^n) 状压 DP
n ≤ 40 O(2^(n/2)) 折半枚举
n ≤ 10^2 O(n^3) Floyd、三重循环 DP
n ≤ 10^3 O(n^2) 二重循环 DP、背包
n ≤ 10^5 O(n log n) 排序、二分、堆、树状结构
n ≤ 10^6 O(n) 双指针、滑动窗口、线性 DP
n ≤ 10^9 O(log n) / O(1) 二分、快速幂、数学推导

这张表不需要死背,但建议有一个大致量感。很多题的第一突破口,恰恰是先根据数据范围排除错误方向。

总结

对刷题新人来说,更推荐这条节奏:

  1. 先补基础实现题,避免一开始就被语法和细节绊住
  2. 再按专题系统推进,建立知识地图
  3. 之后加入随机训练,锻炼识别题型的能力
  4. 面试前集中刷高频题单,提升命中率

比起“今天做了多少题”,更重要的是:你有没有真正积累下可复用的解题方法。

参考链接


如何科学刷题
https://leo-wxy.github.io/2026/03/08/如何科学刷题/
作者
Leo-Wxy
发布于
2026年3月8日
许可协议