资讯详情

力扣刷题进阶指南:从零到三百题的规划、复盘与实战心法

📅 2026/10/17 8:39:20 | 华诺云谱 👁 阅读
力扣刷题进阶指南:从零到三百题的规划、复盘与实战心法
我到现在还记得第一次在力扣上提交失败的画面红色的“解答错误”测试用例卡在第47个我盯着屏幕看了五分钟才看懂它到底在测什么。那之后我在力扣上刷了三年前前后后写了一千多道题其中很多是反复二刷三刷的也从“看到二叉树就头晕”的状态走到现在能比较从容地把一道难题拆成若干子问题。身边经常有人问我力扣刷题到底该按什么顺序有人一年刷了500题还是心里没底也有人只刷了100题就拿到满意的结果。差距不在数量在于有没有把刷题当成一条需要规划、复盘、纠偏的长期路线而不是一款无脑刷进度的游戏。这篇文章想写的就是这条“力扣刷题之路”上我实际走出来的东西怎么确定起点、怎么分阶段选题、每个模块的击破套路、错题怎么管理、上班之后时间怎么挤、以及如何熬过刷到中段必然出现的倦怠期。它更适合那些准备认真刷题的人无论你是刚起步的新手还是已经刷了百来题正在迷茫的老手都应该能找到对应阶段的用法。1. 这条路到底通向哪里先想清楚你在为什么刷很多人打开力扣的第一件事就是按题库顺序从第1题开始做但很少有人停下来想一个问题我到底为什么刷题想清楚动机比多刷五十道题重要得多因为动机不同选择的题库范围、做题深度、时间投入完全不是一回事。1.1 四种刷题动机四种完全不同的路线我把这些年接触到的刷题人群大致分成四类你可以对照一下自己在哪个位置动机类型典型画像题库选择刷题深度面试突击型近期要面技术岗目标明确高频题、热题榜单、公司题库如果有重解题速度与边界覆盖求稳能力成长型非科班转行或科班但基础薄弱按经典知识模块系统性刷重理解每道题吃透算法爱好者比赛党、追求思维乐趣周赛、困难题、细分专题重一题多解与复杂度极值随大流型看别人刷我也刷没方向今天简单明天困难最浅容易放弃这四类里前两类占据了大多数人。如果你是面试突击型那么“以终为始”就是你的第一原则——先搞清楚目标岗位对算法考察的深度再决定刷哪些题。如果你是能力成长型我建议把眼光放长不要指望刷完三百道题就脱胎换骨真正的变化发生在你把每个模块的规律嚼碎之后。我自己属于第二类和第三类之间。前半年纯属为了补数据结构短板后来慢慢刷出兴趣才开始追周赛和一题多解。回头看我见过的不少案例A同学用了三个月每天刷四题结果面到动态规划还是懵原因就是他只会背某一道题的解法换一种包装就不会了。B同学刷得慢但每道题都写复盘三个月后能力明显上了一个台阶。所以先别急着问“每天刷几题”先问自己是哪一类人。1.2 “AC就是完成”的想法恰恰是效率最低的很多人把一道题提交通过当成这件事的终点我恰恰认为那是起点。只追求AC刷到的只是“这一道题的答案”而不是“这一类题的解法”。真正的完成标准应该是你能不能在提交通过之后回答出下面几个问题。第一这道题的时间复杂度和空间复杂度是多少最优解能不能再降一个量级第二代码的边界情况处理全了吗空输入、极端长度、溢出这些是不是都考虑过第三这道题和之前做过的哪些题是同一类它们的共同套路是什么能做到这三点的题才算真正吃透。我在刷题笔记里给每道题都打了一个“完成度”标签一刷通过只能算50%写完复杂度分析和同类题总结才算100%。如果你现在做题从来不关心复杂度那么第一件事不是去多刷题而是把之前刷过的简单题翻出来把复杂度逐题标注一遍。这个过程很枯燥但它是你从“代码搬运工”走向“会设计算法”的必经之路。2. 从零到三百题的分阶段规划题库不是跑步机我见过太多人把力扣题库当成跑步机每天上去跑一小时从第1题挨着做做到150题左右就做不动了因为后面的题目难度陡增。问题不在于你不够努力而在于你缺少阶段划分。力扣题目数量已经破千盲目开刷和裸考没有区别你需要一套根据自己当前能力动态调整的选题策略。2.1 四个阶段入门、基础、进阶、冲刺我给自己的刷题路划分成四个阶段每个阶段只做该阶段该做的事。阶段题量范围核心侧重点建议周题量入门期0–60题数组、字符串、哈希表、链表基础操作10–14题基础期60–200题二叉树、DFS/BFS、双指针、回溯8–10题进阶期200–400题动态规划、贪心、图论、并查集6–8题冲刺期400题以上高频题二刷、困难题突破、限时模拟持续保持手感入门期先别碰“困难”标签自闭刷题只会打击信心。我在入门期给自己定了一条规矩只做通过率高于50%的简单题和少量中等题目标就一个熟练掌握一门语言的基础写法把数组遍历、哈希表增删查、链表节点交换这些动作练到条件反射。这个阶段最忌讳的就是边查语法边想算法两手抓两头都不硬。基础期开始接触递归和树题目难度会明显上一个台阶。这时候每道题花的时间可以放宽到一小时但注意不要卡太久卡题超过半小时没有思路就先看题解看懂后合上书自己写一遍效果远好于死磕两小时。到了进阶期动态规划和图论会让很多人再次崩溃这时候不要贪多一天一到两道难题就够重点是把套路提炼出来。四个阶段走完你再回头看那些曾经让你崩溃的题目会有一种很真实的通透感——题目还是那些题目但你的眼睛已经变了。2.2 每天几题、每题卡多久其实有公式总有新手问我每天到底刷几题合适说实话没有标准答案但有一条经验可以作为参考把“每周有效完成题数”定在8到14题之间比每天硬性规定“必须刷3题”要科学得多。原因很简单刷题不是计件工作一周内你会遇到加班、聚会、状态低落允许自己某天不刷但周末补上这样的节奏才可持续。做题过程中时间卡点怎么定我自己的规则是“15分钟原则”拿到一道中等题如果15分钟内没有任何有效思路直接看题解。这不是偷懒而是高效利用学习资源——力扣的大多数中等题都是某种已知套路的组合应用靠自己想通并不比直接看题解更高效。但看完题解后必须做一件事合上题解自己从零写一遍然后在笔记里记下“为什么我没有想到这个思路”这才是看题解的价值。从零开始的第一周我建议你这样安排前两天只刷数组和哈希表的简单题每天三题第三天开始接触链表的简单题第四天尝试两道简单难度的二叉树入门题感受递归的写法第五天到第七天把前四天做过的所有简单题重新读一遍不写代码只回忆思路和复杂度。这一周看似题量不多但它能帮你建立对“刷题”这件事的正确体感。3. 常考模块逐个击破的实操心法不要按题目编号顺序刷力扣题库不是线性的按编号从1刷到500你会先把数组、字符串、链表这些基础题做完然后一头撞上动态规划的墙。更好的策略是按知识模块横向击破把一个套路练熟再换下一个。下面我挑几个最劝退、也最高频的模块说说我自己怎么打。3.1 遍历就是一半数据结构题的底子很多人搞不定二叉树和图问题往往出在“不会写递归”。其实递归没有那么玄乎你只需要记住一个骨架处理当前节点、递归调用左右子树、考虑结束条件。以二叉树的前序/中序/后序遍历为例核心代码就这几行def dfs(node): if not node: return # 先序位置先处理当前节点的逻辑 dfs(node.left) # 中序位置处理完左子树后的逻辑 dfs(node.right) # 后序位置处理完左右子树后的逻辑关键在于理解递归函数中不同“位置”的语义。先序位置在调用左子树之前适合做“当前节点需要先被处理”的操作中序位置在左子树之后、右子树之前天然对应排序二叉树的中序遍历结果后序位置在左右子树都处理完之后常用于“先拿到子问题的结果再汇总给父节点”的计算。能把这三个位置吃透树的题目就解决了一大半。链表题也是一样说到底就是两个动作指针怎么走、节点的指向怎么改。我刷链表题时会在草稿纸上画每一步的节点指向图把prev、cur、next三个指针的移动顺序画清楚再写代码。不要嫌画图慢画得慢、写完快这比盯着代码空想要效率得多。3.2 动态规划劝退点在哪五步法帮你稳住动态规划是公认的“分水岭”太多人卡在这一关。“这道题我明明看过题解换一个题目就不会了”就是我听过最多的抱怨。其实动态规划题有一个通用的分析框架我称之为“五步法”定义状态数组的含义、推导状态转移方程、确定初始化条件、确定遍历顺序、最后打印dp表检查。拿最简单的一道二维路径问题举例——机器人从左上角走到右下角每次只能向右或向下求不同路径数。按照五步法第一步定义dp[i][j]为走到第i行第j列的不同路径数第二步很容易想到dp[i][j] dp[i-1][j] dp[i][j-1]因为每个格子只能从上方或左侧到达第三步第一行和第一列的格子都只有一种走法初始化为1第四步从上到下、从左到右遍历第五步写完后在脑子里按表格推一遍。def unique_paths(m, n): dp [[0] * n for _ in range(m)] for i in range(m): dp[i][0] 1 for j in range(n): dp[0][j] 1 for i in range(1, m): for j in range(1, n): dp[i][j] dp[i-1][j] dp[i][j-1] return dp[m-1][n-1]这套方法看起来很笨但它是破局的关键。我把第二三四五步统称为“半机械动作”很多DP题难就难在定义状态这件事上。状态定义不唯一多试几个角度——是dp[i]表示前i项的结果还是dp[i][j]表示区间i到j的结果还是dp[i]表示以i结尾的结果把常见状态定义模式收集到手等面试场上碰到DP题至少有几套牌可以打。3.3 回溯与搜索先画决策树再写代码回溯算法在“排列组合类”题目里高频出现也是许多人觉得“剪枝”是最难的地方。我刚开始学回溯时总想一步到位写出最优解后来发现正确路径是第一版只做纯粹的穷举不管效率先把所有可能列出来跑通之后再考虑剪枝剪掉那些已经可以判断不可能的分支。回溯本身有一个万能的递归模板def backtrack(路径, 选择列表): if 满足结束条件: 记录当前路径 return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择关键在于“做选择”和“撤销选择”的对称——递归进去是什么状态回来就得是什么状态。我见过太多新手在这里出错选了但是忘记撤销结果第二次循环时状态已经乱了排错排到怀疑人生。一个最笨也最有效的方法在撤销选择那一行打印当前路径把递归过程完整打出来看状态走没走对一目了然。4. 复盘才是刷题的主战场错题管理的三条铁律如果只让我给一条最重要的建议那就是刷题的数量由你刷过的题目总数减去你忘记的题目数量决定。这句话不好听但这是事实。我观察了很久绝大多数刷了300题仍然觉得空落落的人缺的都是复盘这套动作。错题管理不是让你攒一堆收藏夹而是有一套可执行、可坚持的机制。4.1 每道题刷完至少留下四条记录我在本地用文档维护了一个刷题档案每道题占一个条目字段不多但足够让我三个月后重新打开时能快速回忆起这道题的核心。四个必填项如下表记录项写什么为什么写核心思路用一两句话解释解法逼自己把思路压缩成可复述的模型卡点与错因第一次做时卡在哪一步卡点就是你的思维盲区是复习的靶心复杂度分析本题最优解的时间与空间复杂度形成了复杂度意识面试不被动同类题型这道题属于哪一类套路给题目分类把点连成网千万别小看第四项。我后来二刷时发现我第一次做得磕磕绊绊的题目往往不是因为难而是因为我对“这一类题”缺少归纳。比如“滑动窗口”就是一个套路不管题目包装成什么样子核心都是维护窗内状态、判断窗口收缩条件比如“区间合并”就是先排序再扫描几乎可以机械解决。当你的笔记里能把题目按套路归类时你就已经建立了知识体系而不是一麻袋散装知识点。四要素写起来很花时间尤其前期一道中等题可能要记十几分钟。我一度也嫌麻烦直到我发现自己刷过的第80题在三个月后完全认不出来才意识到这个时间省不得。你刷一百道题如果每道题都是一次性记忆那你的真实存量可能只有二三十道花一半的时间记复盘存量反而能到七八十道。4.2 二刷三刷的时机记忆曲线比意志力可靠复盘不只是记录还包括复习。我遵循的节奏很简单一刷完成的第3天回顾一次思路第10天到14天重新做一遍第30天再做第三遍。第三遍仍然能做对并且能独立写出精简解法这道题才算从“当过客”变成“自己人”。最常被误解的是“复习重看一遍代码”。重看没有用关键是关掉题解、重新手打代码。我自己二刷时会给自己加一个条件不看自己之前的笔记纯靠记忆写出完整答案。如果写不出来只能说明这道题你还没学会老老实实回归第一遍的正常流程再走一遍“看题解、合上重写、记卡点”的循环。这个过程很残酷但也确实可靠。4.3 题解区怎么读不是看答案是看那些你没想到的东西很多人的做题流程是不会做翻题解抄代码提交过完事。这是效率最低的用法。高水平地使用题解至少要读三样东西。第一看代码之前先看思路文字和复杂度分析。力扣的题解很多只贴代码不解释但也有不少认真写思路的文章先看懂别人的推导链条而不是先看代码本身。第二重点关注和你自己思路“差一个关键步骤”的地方——那种“原来还能这样想”的瞬间才是你真正的增量。第三如果这道题有多个解法至少浏览前两三种不需要全部实现但要用一句话概括每个解法的核心思想。有一次我做一道有序数组题目自己的解法是二分查找写完提交后翻了翻题解发现用双指针就能在线性时间内完成两个点一对比我才真正理解“二分降低复杂度但双指针通常利用有序性消除一层循环”这句话。这种对比带来的收获比自己多刷十道题还要大。5. 工作之后的刷题时间战见缝插针与整块时间很多人私下和我说刷题最大的障碍不是题目难而是上班之后真的没时间。这个说法一半是真一半是借口。我白天要上班晚上回家还有一堆生活琐事确实不可能再有学生时代那种整晚刷题的条件。但也正因为这样我摸索出一套“碎片时间看轻量、整块时间做专项”的打法。5.1 碎片时间的正确用法不是打开app硬做难题通勤、午休、排队这类碎片时间一共可能有大半个小时。如果是新手我建议不要试图用碎片时间完成一道困难题——思路刚建立起来就被打断体验很差而且很容易形成“我今天刷了题”的错觉。碎片时间我主要做三件事。第一读题解挑一道标记过的中等题在手机上看官方的思路分析不写代码只看思路。第二回忆复杂度随手翻自己笔记里记录的旧题在心里默想解法思路与时间/空间复杂度想不起来就点开瞄一眼。第三背模板把二叉树遍历、回溯、DP分析的框架在脑子里过一遍就像背单词一样每天过几遍形成肌肉记忆。这三件事听起来不起眼但叠加起来力量不小。碎片时间最大的价值不是处理高难度认知任务而是维持“手感温度”让你在晚上坐到电脑前时不需要花半小时热身就能进入状态。5.2 晚上的整块时间两小时只干一件事以我自己的经验下班后能从晚上九点挤出两小时已经非常奢侈所以这两小时的使用原则必须是“高浓度”。我给自己定的规矩是一个晚上只处理一个知识模块绝不东一榔头西一棒槌。比如今天晚上是动态规划那就是两道DP题难度从简单到中等明天晚上是图论那就把DFS/BFS在图上的写法练透。为什么这样安排因为算法能力的提升是“局部强化”的过程你在一个模块里连续浸泡才能看清套路的变化。今天刷一道数组、明天做一道树、后天碰一道字符串每个模块都浅尝辄止大脑根本来不及归纳。反之连续三晚都练回溯你会明显地感到从“照抄模板”到“知道什么时候该用、怎么剪枝”的转变。这里的另一个细节是晚上的时间要刻意避开“难题陷阱”。白天已经很累了晚上再做超出当前能力的困难题往往会在前30分钟就耗尽精力剩下的一个半小时就是无效挣扎。我的做法是状态好的晚上冲一道困难状态一般的晚上就老实刷中等题巩固。5.3 周赛不是比赛是给你设置截止日期上班之后时间本来就碎更容易把刷题拖成“有时间再做”的状态这时候最需要的不是意志力而是截止日期。每周日的力扣周赛就是现成的截止日期。我不建议每个阶段都去参加周赛因为前期的你可能连题都读不完去了也是打击。但当你刷到150题左右时周赛就变得非常有价值它逼你在有限时间内完成和评分还能真实暴露你在压力下读题、选算法、写代码、调试的能力。我参加周赛的主要目的不是排名而是给每周的刷题设置一个“交付节点”周赛结束后根据自己的表现回看笔记哪类题卡住了下周就专项补哪类。这种做法最实际的好处是让刷题从“无限期任务”变成了“周期性交付”它天然形成反馈闭环。即使某次周赛成绩很差你也会得到一个非常具体的信号知道自己接下来的七天该练什么。6. 刷到中段之后的瓶颈与心态这条路最难的其实是坚持很多人的刷题之路不是倒在起点而是倒在150到300题这段区间。这个阶段简单题已经刷腻了明显的进展感消失了动态规划又反复卡人很多人因此开始怀疑自己是不是“不适合刷题”。我想说这种感受太正常了因为刷题曲线的中段就是最陡的一段爬坡几乎所有人都会在这里经历平台期。6.1 平台期的信号与对策越早识别越好平台期的信号其实很好辨认一是打开题库划半天不知道做什么二是简单的题看哪儿哪儿熟中等以上的题看哪儿哪儿懵三是刷完之后大脑一片空白没有“我又学会了一样东西”的感觉。我的应对办法是主动变轨。第一种变轨是“降维复习”把之前做过的经典简单题重新做一遍但不追求一次通过而是追求写出最优解、写出多种解法。这能快速找回掌控感。第二种变轨是“换场景”从按题库刷题切换到按专题刷题用题单或者自己整理的同类型题列表集中把一个方法吃透。第三种变轨是“允许暂停”如果你连续一周都觉得分数没有进展、做题完全没有兴奋感那就干脆把刷题停掉几天去写写业务代码、做点其他事情间隔期之后再回来你会发现很多之前想不通的题目突然变得不那么可怕了。平台期还有一个心理因素人对“线性进步”有天然的期待总觉得刷得越多就应该越强。但算法能力的增长更像台阶式你可能在某个难度里停留很久积累够了才突然上一个台阶。所以如果两周内感觉毫无进展不要急着自我否定先检查自己是不是只在做已经会做的题目如果是那说明你该换难度了。6.2 允许自己慢下来之后反而刷得更快了我刷到将近300题时曾经做了一个非常反直觉的决定每天只刷一题有时候甚至两天才刷一题但要求是这道题必须完全吃透包括多种解法、复杂度、变体。很多人听到这个会觉得进度太慢但实际上这三个月是我能力提升最快的阶段。原因在于把刷题的速度降下来后我有更多时间去归纳、去比较、去内化把每个模块里的解题套路真正长到身上。后来我重新提速时发现很多之前要花四十分钟的中等题现在十分钟内就能写出清晰解法。这种提速不是机械刷量带来的而是对整个问题框架熟悉之后自然发生的结果。所以如果你正处于“刷了很多题但还是不会”的焦灼里我真心建议你试试放慢一周只攻一个模块把每个模块的常见题型扫一遍你会体会到什么叫厚积薄发。6.3 工作之后我为什么还在刷题有段时间我经常问自己一个问题如果近期完全没有面试需求我还有必要保持刷题习惯吗每一次我的回答都是一样的有必要。不是为了某个具体流程而是因为刷题带来的分析能力会渗透到日常的工作里。遇到复杂业务问题时我下意识地会先抽象、再拆解、最后找最优方案这个思考路径就是刷题训练出来的。同时我也和很多长期刷题的朋友交流过大家普遍有一个共识这一行的技术栈三年一小变、五年一大变但算法和数据结构是其中的“不变量”。练好它们其他技术换得再勤你也有底气去快速适应。如果让我给刚踏上这条路的人一个最朴实的建议那就是今天不要纠结任何策略打开力扣挑十道简单题连续做掉先让成就感出现。这条路很长但每一步都算数你刷过的每道题、写下的每篇复盘都会在未来的某个时刻连点成线——就像我三年前深夜提交的第一道题当时只觉得挫败现在回头看那正是整条路的起点。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑