☰
力扣每日9刷题法:一套可复用的算法练习体系
2026/10/14 3:59:14 网站建设 项目流程

1. 这个“每日9”的计划是怎么来的

先说结论:“力扣每日9”不是官方出的某个固定打卡活动,也不是某个老师的统一作业,而是我给自己定的一条刷题纪律。核心意思很简单:每天在力扣平台上完成9道算法题的练习,雷打不动地执行一段时间。这9道题不是随机乱点,而是按照难度、知识点、题型分布预先排好的顺序来推,覆盖数组、链表、字符串、二叉树、动态规划这些高频区间,顺带复习以前已经做过的题。之所以选“9”这个数字,是因为我之前试过每天5道,太松,下班回来一放松就只做两三道;也试过每天15道,撑了两周就疲了,到了后期纯粹赶数量,做题变成了抄答案,根本不进脑子。9道题是刚好卡在“能完成”和“有压力”之间的一个量级,实测下来每天投入两到三个小时能端到端走完,不会影响正常工作和休息。

这个计划的目标也不是“刷完一千题然后签约大厂”那种遥不可及的flag。我给自己定的目标是两个层面:短期目标是形成高频题型的肌肉记忆,见到数组翻转、二叉树遍历、动态规划入门题就能秒出思路;长期目标是建立自己的刷题知识库,把零散的解题法沉淀成一套能复用的模板。所以“每日9”不是单纯的数量竞赛,而是一个带有复习节奏、分类策略、复盘机制的训练循环。这篇文章会把我的完整做法、题目怎么挑、时间怎么分、笔记怎么做、踩过哪些坑,全部摊开来写一遍,希望能给正在规划刷题路线的朋友一些参考。

适合看这篇内容的人,我觉得主要有三类:一类是准备面试、很快要集中刷题却不知道怎么下手的求职者;一类是已经刷了不少题,但进度混乱、感觉刷过就忘的在职开发者;还有一类是想给学生讲清楚算法刷题方法的人。无论你基础怎么样,从每天9道这个节奏切入,都比直接从题库第一千题开始硬啃要稳妥得多。

2. 为什么数字定在9:一天9道的逻辑拆解

2.1 不是5也不是15,9这个量级到底意味着什么

刷题强度这件事,我觉得大多数人一开始都会走两个极端。第一个极端是高估自己下班后的自控力,一开始定每天5道,听起来不多,但真正实操起来,5道里边可能有两三道是不太熟悉的知识点,一旦卡住,耗掉一个小时也未必做得出来,最后当天就没完成。第二个极端是高估自己的精力,一开始定15道甚至20道,前三天看起来很猛,到了第五天身体和精神就开始抗议,哪怕硬撑着完成了,绝大多数题也只是“看了答案默写了一遍”,跟没做区别不大。

每天9道处在什么位置呢?如果按照一道题平均20到30分钟的有效思考时间来算,9道题大约是三个多小时的纯净刷题时间。当然不是每道题都要花20分钟,简单题可能五六分钟就写完,难题可能四十分钟也没底。但综合下来,9道题的长度刚好够你在一个小周期内完成“热身、新题、复习、复盘”四件事。我在执行过程中发现,如果每天少于7道,就很容易把新题和复习两种任务拆到两天里,节奏会碎;如果多于11道,到了后半程就明显开始敷衍。9是一个实战试出来的平衡点,不是数学上有什么神奇含义,就是刚好适合大多数业余时间刷题的人。

还有一层考虑是连续性问题。刷题最怕的不是某天做得少,而是断档。9道题这个体量,周末状态好可以多做到12道,工作日加班回来至少也能保底完成6到8道,这样“每日9”的平均水平就能稳在9上下。长期执行下来,总量非常可观。一个月就是270道左右,三个月能覆盖约800道次的练习,这个体量足够覆盖大部分面试常考题型。

2.2 9道题怎么配比:新手题、中等题、复习题的结构

9道题不是随便点的9道,我的固定配比是4新3旧2看。这里的“新”指完全没见过、需要现场思考的题目;“旧”指两天前或一周前做过,现在重新独立做一遍的题;“看”指不是从头写代码,而是快速浏览题解和评论区的思路,整理进笔记的高频套路题。这样一天9道的结构从内容上看是三明治:前面几道先做熟悉的题热身,中间做新题顶一顶,最后再做几道旧题验证记忆,中间穿插两道只需要“看思路”的题作为休息。

举个例子,假设今天我计划覆盖动态规划专题,我实际安排可能是这样:

序号类型具体内容目标
1旧题复习链表反转类热身,寻找手感
2旧题复习最长回文子串验证是否真的理解
3新题背包类DP尽力写,写不出来也记录下来
4新题路径计数DP练习状态转移
5看题区间合并的通用模板整理注释技巧
6新题股票买卖类入门理解状态机
7旧题复习快慢指针题巩固双指针模板
8看题前缀和二维版记录公式变体
9旧题复习最近做的中等题周末错题回看

这个表格看起来很规整,实际执行时如果哪道新题花了太久,我通常会把“看题”的那两道改成临时挡位,优先保证旧题复习不被挤掉,因为新题永远刷不完,但旧题的遗忘是不可逆的。复习比重一定要守住,这是我踩过坑之后才想明白的。

3. 每天的实操节奏怎么安排:从上班族角度给一套时间表

3.1 碎片时间做哪类题,整块时间做哪类题

很多人问我每天拿不出三小时整块时间怎么办。我的答案是:不要指望每次都是三小时整块时间,把9道题拆进一天的不同时间段,效果反而更好。

我自己的时间结构是这样的:早上坐地铁或到公司之后的半小时,做第一道旧题复习,因为这个时间段脑子还没完全热起来,不适合啃难题,但做过一遍的旧题刚好可以激活前一天的记忆。午休时间拿20到30分钟做一道新题,但这道新题要选择“思考量是靠技巧而不是靠代码量”的题,比如字符串处理、哈希表这类,写起来不会太长。晚上下班后的黄金时间大概是八点到十一点,这段时间集中处理剩下的五六道题,重点攻克今晚的核心专题。

碎片时间做题有一个前提:题目必须提前选好,不要在碎片时间里打开题库现找。我通常是在前一晚睡觉前把第二天的题目清单放进收藏夹,第二天直接按顺序开刷。千万别小看这一步,现找题是最浪费时间的,翻来翻去五分钟过去了,情绪也被磨没了。

晚上整块时间怎么用也很关键。我的顺序是先做新题里比较难的那道,趁着精力充沛硬刚;然后做中等难度的两道,让脑子进入流畅状态;最后做旧题复习和“看题”,这时候精力开始下降,做一些不费脑的整理工作,刚好收尾。如果把顺序反过来,太难的新题放到晚上最后,很容易做不出来导致当晚心态崩掉。

3.2 刷题时的计时和计数策略

我每一道题都用手机或网页秒表计一下时间,不搞那种严格倒计时,而是记录“开始到写出答案”的总时长。这样做的价值不是给自己制造紧迫感,而是过一段时间复盘时能看出来:到底哪些知识点消耗了我最多的时间,是不是每次都在同一类题上反复卡壳。

我给自己设了三个阈值:15分钟、30分钟、45分钟。15分钟之内出思路并写完的题,属于“已经掌握”级别;15到30分钟之间写完的题,属于“基本掌握但需要复盘”级别;超过45分钟还没写出来的题,直接放弃看题解,绝不硬耗。这不是自暴自弃,而是基于一个很实际的经验:一道题如果45分钟还在绕圈子,说明思路方向可能本来就是错的,再耗下去边际收益很低,不如直接学习题解里的正确路径,然后第二天找一道同类型的题来验证掌握程度。

我见过不少人把“做题时间”当成“思考时间的勋章”,一道题卡两小时也不肯看答案,最后做出了但完全不知道那种解法是通用的还是巧合的。我觉得这非常不划算。45分钟这个cutoff帮我省下了大量时间,省下来的时间足够把题解吃透,还能顺手整理一道模板题。

3.3 每天必须完成的“收尾动作”

每做完9道题,我还会花15分钟左右做三件小事。第一,把今天遇到的所有错误原因简单记录一下,不需要长篇大论,就写“边界条件漏了”“空指针没想”“状态转移抄错下标”这类一句话;第二,把今天的题目分类标记成“已掌握”“需复习”“重做”,分类决定这道题下次会在第几天出现;第三,把今天做的“看题类”两道题的知识点要点补充到自己的模板笔记里,比如某个双指针模板长什么样、某个DP的状态定义怎么描述。

很多人做完题就算结束了,其实“收尾动作”才是每日9计划里真正拉开差距的部分。因为刷题到了一定数量以后,你会发现题目形态千变万化,但底层模板就那么多。如果不做收尾整理,这9道题就是9个孤立的事件,过两周大概率忘光。做了收尾整理以后,这些题才会变成一套可复用的体系。举个例子,你做过10道关于“链表反转”的题,如果每做完就丢了,下次见到变体还是抓瞎;但如果你在收尾时写了一句“链表反转的核心是把null链头当成初始prev”,下次看到任何变体都会瞬间定位到这个模板。

4. 题目怎么选:题库那么大,每天9道从哪挖

4.1 按专题分批次推进,而不是按题号从头刷

题库里有两千多道题,按题号从头往后刷是我见过效率最低的做法,我早期也干过,结果刷到三百多题时发现前面两百题忘得精光,而且中间很多题考点重复,浪费了大量时间。我建议的做法是把题库按高频专题分成十几个批次,每个批次集中刷一个方向,持续几天到一周,直到这个专题的常见套路基本成型。

以我自己的推进顺序为例:第一批是哈希表与数组,因为这个方向最基础,很多题只需要几行代码就能验证思路;第二批是双指针与滑动窗口,这是面试最爱考的题型之一;第三批是链表,链表题实现起来繁琐但思路相对固定,适合用来训练边界意识;第四批是二叉树与递归,这一批开始需要一定的抽象能力;第五批是堆与优先队列,然后是图论基础、回溯、动态规划、贪心、并查集等等。

每一批我大概会安排一到两周的“每日9”,也就是说每天9道题里有3到4道跟当前专题强相关,剩下的其他专题用来穿插复习。这样两周下来,当前专题大概能积累40道左右的题量,足够覆盖这个方向上的多数考法。之后进入下一批专题时,每天仍然会保留一两道之前专题的题目来防止遗忘。

4.2 难度分布:简单中等的比例要压住

我看到很多人的刷题计划喜欢一上来全做困难题,觉得简单题没有价值。这个观点我不太认同。对于大多数还没建立起完整知识树的人来说,困难题的解法往往需要多个知识点叠加,一道题里既要用到递归,又要结合贪心,还要处理很复杂的边界条件,如果其中任何一个环节不够熟,整道题就是看天书。硬啃困难题最大的坏处不是做不出来,而是做不出来之后你根本不知道缺的是哪一块,复盘也不知道从哪复起。

我的配比在大多数时间里是2道简单、6道中等、1道困难。简单题用来温手和覆盖冷门知识点,中等题是刷题的大头,也是面试中的主战场,困难题则放在周末状态好的时候重点拆解。这样安排的核心逻辑是:中等题做多了,简单题自然变得不用思考;困难题只要能够见多识广,平时积累的模板够多,也能拆成若干个中等题来解决。反过来,如果每天都是困难题,很容易出现一种情况:做十道困难题,只有两三道真正消化了,其余全是囫囵吞枣。

4.3 建立自己的“每日9清单”维护方法

我维护清单的方式非常朴素,用表格管理。表头是日期、第几轮、当前专题、新题编号、旧题编号、完成情况、待复习标记。每天晚上刷完题以后花两分钟更新这个表,周六花半小时看一遍本周的完成情况,重点标出那些完成情况很差的、或者标记了“需复习”但一直没复习的题。

我把复习周期定为“1天、3天、7天、15天”四档。当天标记为“需复习”的题会在第二天重新出现,第二天还错的话就进入3天周期,然后再错再升级到7天、15天。这个机制听着复杂,实际维护起来非常简单:只需要在表格里对每道错题记一个“下次复习日期”,每天开始刷题前看一眼今天有哪些题到达了复习日期,把它们填进今日9道里的“旧题”坑位就行。这个方法从行为心理学上看有一个巨大优势:它把复习变成了日程表上的硬任务,而不是“有空再说”的软任务。

5. 刷题的核心动作拆解:一道新题到底该怎么处理

5.1 审题阶段:别急着打开编辑器

很多人做一道新题,读完题面之后第一反应就是打开编辑器往里敲。这个习惯会带来一个典型问题:边写边想,写到一半发现思路根本不对,然后删除重来,反复几次以后连题目都在脑子里变得模糊了。我的经验是,拿到一道题以后至少花三到五分钟,把题目的输入输出、数据范围、边界条件先写在草稿纸上。

具体来说是三件事:第一个是判断这道题属于什么类别,是数组、字符串、树、图还是数学题,这决定了你从哪个武器库里找工具;第二个是看数据范围,数据范围会直接提示复杂度预期,比如一看到n在10的5次方量级,基本说明O(n^2)的暴力算法大概率不可行,应该考虑O(nlogn)或者O(n)的解法;第三个是手动推演一下题目给的示例,用自己的话把解题思路说一遍,说不清楚就说明还没理解透。

这三个步骤做完,真正写代码的时间可以缩短非常多。我觉得大多数“卡题”其实不是卡在代码,而是卡在审题阶段脑子里没有形成清晰的输入到输出的路径,代码只是把模糊的思路翻译成语法,自然怎么翻译都别扭。

5.2 实现阶段:先跑通再优化

我见过两种极端风格的刷题者。一种是一开始就追求完美解法,写出来的代码恨不得时间复杂度空间复杂度都最优,结果迟迟写不完;另一种是完全不管复杂度,能暴力就暴力,写完提交得了就算过。我的主张是:第一版代码先保证正确,能用最直白的方式做出来就算成功,然后再花几分钟想一想能不能通过优化省掉一层循环。

具体落地是这样一个流程:先写最自然的解法,通常是暴力枚举或者简单遍历,把题目跑通;然后检查当前算法的时间复杂度是不是卡在数据范围边缘,如果是就再想一步优化方案;优化时优先考虑空间换时间,比如用哈希表记录已经见过的值,而不是无脑坐等超时。这个过程是我觉得刷算法题最舒服的节奏,既不过度设计,也不摆烂。

有一个细节需要提醒:写代码时一定要把变量名写清楚,哪怕这是一道刷题练习,也尽量用有意义的命名而不是i、j、k满天飞。原因很简单,刷题不等于比赛,你需要在一个月后重新咀嚼这道题的思路,如果变量名全是无意义的字母,重看代码本身就会变成一道新阅读题,非常浪费时间。我踩过这个坑,后来养成了用pivot、idx、visited这类语义化变量名的习惯,回看错题时的效率明显提上来了。

5.3 复盘阶段:比做题本身更重要的一步

做完一道题之后怎么复盘,决定了这道题最终会留在你的脑子里还是三天后被格式化。我的复盘不是把官方题解抄一遍,而是做三件事。第一,对比我的解法和最优解法的差异,如果我的解法能过但复杂度差了一个量级,我会记录这个差异点,并在第二天找一道同样类型的题检验自己能不能直接用上新的思路。第二,把这道题抽象成一个“题型模型”,比如“看到两个数组求交集,应该先想到哈希表计数”“看到有序数组找某个值,应该直接想到二分查找”,这些一句话的抽象会在我做题时起到快捷键的作用。第三,翻评论区逛逛,不为抄代码,而是看有没有人提出了非常精妙的变体或一句很有意思的总结,这类表述我会直接放进模板笔记。

复盘我觉得最忌讳的一件事是“在崩溃边缘硬抄题解”。如果你对着题解敲了一遍代码然后跑通,就把这道题当作掌握了,那基本等于白做。正确的姿势应该是看完题解以后关掉题解,自己在编辑器里重新写一遍,然后过两天再来做一次,能独立写出来才算这道题真正入账。在手感和领悟层面,独立思考的价值永远是看答案的十倍。

6. 常见阻碍与解决方法:那些让人想放弃的瞬间

6.1 遇到完全没思路的题,该死磕还是直接看题解

这个问题大概每个刷题的人都会问。我的原则在上面提过:45分钟,到点没思路就停止。但停止之后不是直接去看题解,而是经历一个中间步骤:先把这道题的题面、我尝试过的思路、卡住的位置写成一段简短的过程描述,然后再去看题解。这个动作很关键,因为它把一次“失败”变成了一条可定位的记录。下次复习这道题时,我能很快回忆起当时卡在哪,而不是对着题解从头理解一遍。

看题解本身也有讲究。我会先看思路文字描述,不看代码。把思路搞明白之后,自己动手写实现。写不出来的地方再针对性看代码片段。直接把整段代码从头看到尾是最糟糕的做法,因为你会产生一种“我懂了”的错觉,实际上只是眼睛过了一遍,大脑并没有参与构建。这种错觉是刷题中最隐蔽的时间杀手,它让你以为今天学了很多,其实只是没停下来而已。

6.2 做了就忘怎么办:对抗遗忘曲线的具体措施

遗忘是刷题最大的敌人,这一点怎么强调都不为过。我前几周刷过的题,如果不主动复习,到第三周时大概只有两三成还能独立做出来。后来我引入了“错题周期复习”机制,就是把所有做错的、没思路的、靠题解才通过的题,统统标记为错题,并按“1天、3天、7天、15天”的周期安排重做。

这四档的意义在实作中很清晰:第1天重做是为了确认自己是否真正看懂了题解的思路,此时记忆还在新鲜期;第3天重做是第一次真正检验,因为很多题你第1天能照着印象写出来,第3天就未必还能写出来,这是最真实的能力反馈;第7天重做如果还能写出来,说明这个知识点已经在形成长期记忆了;第15天再重做,基本可以判定掌握得比较牢固。四档全过之后,这道题才可以从错题本里放掉。我执行了一个多月以后,明显感觉到看到老题时不需要再重新推理,思路直接就能冒出来。

6.3 状态起伏与断档补救

没有人能保证每天状态都好。通勤加班、身体不舒服、临时有事情,都可能让当天的9道计划中途搁浅。我的原则是:允许断,但不允许连续断两天。如果某天只完成了4道,那没关系,记录一下;但第二天一定要回到正常节奏,哪怕把当天的新题减到2道,也要先把前一天漏掉的复习题补上。

断档之后不要用“明天做15道补回来”这种方案,因为这种方案必然导致第二天质量崩塌。正确做法是当天补到9到10道,效率优先,把之前落下的题分成两到三天的额外配额,每天额外加一两道,而不是一口气全吃掉。这有点像健身,今天没练的话明天也不该把两天的量堆在一起,身体受不了,动作会变形。

心态上的处理也很重要。我给自己定的心理底线是:月平均每天不低于7道就不算失败,偶尔一天状态差完全可以接受。刷题是一件马拉松式的积累活儿,单日的得失在三个月尺度上都会被稀释,盯住总进度和错题通过率这两个指标,比每天纠结“我今天只做完了7道”要有意义得多。

7. 每日9的扩展玩法:把它变成一个可持续的知识体系

7.1 从刷题到整理高复用模板

刷题刷到200道以上的时候,你会发现很多代码结构频繁出现。比如链表的dummy节点技巧、二叉树的前序递归模板、双指针的移动条件、动态规划的滚动数组、图论的visited数组标记方式。如果你在刷题时每次都重新从头推导这些结构,那效率太低了。我在执行每日9的第三周开始,把每一类反复出现的模板单独整理成一个文件,每个文件里先写模板代码,再写两到三个应用示例,最后写注意事项。

以滚动数组为例,我整理出来的模板就是先把dp[i]依赖dp[i-1]和dp[i-2]的题目归为一类,然后把空间从O(n)压到O(1)时的赋值顺序写清楚,再把什么时候能用滚动数组、什么时候必须保留全部状态写清楚。有了这个模板以后,遇到新题目时我不再从零分析,而是先判断它是否匹配我的已有模板。匹配,就套用加改造;不匹配,才有必要进行全新探索。这套工作流让我的每日9从“每道题一锤子买卖”变成了“知识树在不断长新枝”。

7.2 定期做整体复盘与模拟

每日9做到一个月以后,我加了一个新动作:每个周末用固定时间做一次本周错题的整体复盘。不是重写代码,而是把这一周的所有错题归类计数,看看错误集中在哪个专题。如果连续三天都在某个专题上栽跟头,就说明这个专题还欠火候,下周我会有意识地把该专题的题量临时增加。

另一个很有用的扩展是每周抽一次模拟限时训练,时间固定在45分钟,从当天计划里随机抽出3道题,模拟面试状态。这个过程跟平时刷题最大的区别在于:你不能中途查资料,不能看题解,必须按照真实的压力环境来。模拟最大的价值是训练在时间压力下如何取舍,比如先跳过卡壳的题、保证把会的题全做完,这种临场决策能力在真正面试中非常重要。

7.3 面向面试的最终整理

当刷题积累到一定阶段,我会开始做一套面向面试的最终整理,把每天记在笔记里的碎片化知识压缩成一张张“高频考点速查卡”。每张卡只记三行内容:适用场景、算法模板的一句话描述、最容易踩的坑。比如滑动窗口的速查卡会写:适用子数组和子串连续区间问题;模板是先扩张右边界再收缩左边界;最容易踩的坑是在收缩时忘记更新最优值。这张卡做好了,面试前复习只需要扫一遍,不需要重新刷几百道题。

我做这个整理最大的感受是:刷题的价值不在于题量的绝对数值,而在于能不能随时拿出一套成体系的方法来解释清楚一类问题。面试官考察的从来不是“你见过这道题吗”,而是“你面对一个没见过的问题时,有没有一套从审题到建模再到编码的完整路径”。每日9计划本质上是训练这套路径,题量和配比只是路径训练的表层形式。

8. 坚持了几十天的个人体会

从最初每天做完9道题都精疲力竭,到现在看到任何新题都能自然地按照“审题、匹配模板、实现、复盘”的流程走一遍,我能清楚感觉到自己的变化。最大的变化不是手速变快了,而是面对陌生题时的恐慌感大幅降低了。以前看到一道没见过的题型会本能地觉得“这我不会”,现在会先拆开看它内核是什么,匹配哪个已有知识模块,再决定从哪个方向下手。这种从容感是每天9道题慢慢喂出来的。

过程中也有过想放弃的时候,特别是连续几天被同类型题目反复虐的时候。现在我回头看,那些最让我难受的题恰恰是后来收获最大的题。因为它们让我看清了自己思维路径上的漏洞,比如边界值处理粗糙、状态转移想当然、没有主动考虑时间复杂度可能的超限。每次补上一个漏洞,之后一段时间里就会避免一整片错误。

最后想说的一点是,每日9这个数字不是神圣不可改的,它只是我的节奏。有人适合每天5道,有人适合每天12道,关键是你得先承认刷题是一个需要长期陪伴自己的过程,而不是考前突击的临时任务。根据我个人的实际体验,最值得复制的不是“9”这个数字,而是“每天把新题、复习、复盘三种动作组装在一起”的结构。只要这个结构在,哪怕你某天只做了4道题,这个计划的骨架依然稳稳立在那里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询