LeetCode 高效刷题方法
刷题不是越多越好,关键是有方法、有节奏、有复盘。很多人刷了 300 道题,遇到新题还是没思路;有些人刷了 100 道,却能举一反三。区别不在于数量,在于方法。
为什么你刷题效率低
常见的低效刷题模式:
- 按顺序刷:从第一题刷到最后一题,没有分类,遇到不会的就死磕
- 只看答案:看完觉得自己会了,过两天再做一遍还是不会
- 不总结套路:每道题都是独立事件,没有提炼通用模式
- 不做复盘:错了就错了,下次还是犯同样的错误
刷题的核心目标不是「刷完多少道」,而是「遇到新题能快速找到思路」。
高效刷题方法论
方法一:分类专题刷法
刷题最有效的方式是按题型分类,每类集中突破。
推荐刷题顺序(按题型):
第一轮:数组 + 哈希表(最基础,题型最多)
第二轮:链表(指针操作)
第三轮:二分查找(边界条件是难点)
第四轮:滑动窗口 + 双指针
第五轮:栈和队列(单调栈是高频难点)
第六轮:二叉树(递归是核心)
第七轮:回溯(组合、排列、N皇后)
第八轮:动态规划(最难的专题)每个专题吃透之后再进入下一个,而不是混着刷。
方法二:模板刷法
每类题型都有固定套路,把套路提炼成模板,遇到新题直接套。
双指针模板:
// 对撞指针
int left = 0, right = nums.length - 1;
while (left < right) {
if (condition) return result;
else if (nums[left] + nums[right] < target) left++;
else right--;
}
// 快慢指针
int slow = 0;
for (int fast = 0; fast < nums.length; fast++) {
if (condition) {
nums[slow] = nums[fast];
slow++;
}
}单调栈模板:
Deque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {
int idx = stack.pop();
result[idx] = i - idx; // 计算结果
}
stack.push(i);
}遇到新题时,先问自己:这道题属于哪个专题?能用哪个模板?
方法三:三遍刷题法
每道题至少做三遍,才能真正变成自己的。
第一遍(理解): 读题,想思路,尝试写代码。如果 15 分钟没思路,看答案理解思路,然后自己写一遍。标记:🟡 中等 / 🔴 困难。
第二遍(巩固): 隔一天后重新做这道题,不看答案,独立完成。如果 10 分钟内没有思路,说明还没掌握。标记:🟢 熟练。
第三遍(提速): 一周后再做,目标是优化时间复杂度和空间复杂度,练习多种解法。标记:✅ 掌握。
方法四:面试倒推刷题
如果是为了面试,可以按面试高频率刷题:
必刷(面试出现率 > 50%):
- 两数之和(哈希表)
- 合并两个有序链表
- 二叉树的中序 / 前序 / 后序遍历
- 反转链表
- 有效的括号(栈)
- 爬楼梯(动态规划)
- 二叉树最大深度
高频(面试出现率 > 30%):
- 三数之和(双指针)
- 接雨水(单调栈)
- 最小栈(辅助栈)
- 二叉树的层序遍历
- 每日温度(单调栈)
- LRU 缓存(哈希表 + 双向链表)
- 岛屿数量(DFS/BFS)
刷题节奏建议
每日安排
| 时间段 | 内容 |
|---|---|
| 前 30 分钟 | 复习昨天的一道困难题 |
| 后 1-2 小时 | 按专题刷 2-3 道新题 |
| 睡前 10 分钟 | 在脑子里回顾今天学的题型模板 |
周复盘
每周日做一次复盘:
- 本周刷了哪些题型?
- 哪些题型已经完全掌握?
- 哪些题型还不熟练,需要继续练?
- 错题的原因是粗心还是思路不对?
刷题心态
不要怕困难题。 第一次遇到 Hard 题没思路是正常的,先看答案理解,再自己写,最后背模板。
不要比数量。 刷了 500 道但每道都只做一遍,不如刷 200 道但每道都做三遍。
不要死磕。 一道题超过 30 分钟还没思路,直接看答案。看完答案后,闭卷重写一遍,比死磕效率高得多。
不要忽视简单题。 简单题不是没用——简单题练的是代码实现能力和边界处理。很多人的简单题其实不够熟练,导致简单题丢分。
总结
刷题的核心公式:
高效刷题 = 分类专题突破 + 模板提炼 + 三遍法则 + 定期复盘不要追求刷了多少道,要追求遇到新题能快速找到思路。把每一道题做透,比囫囵吞枣刷 500 道题有用得多。
