
1. 这个“每日9”的计划是怎么来的先说结论“力扣每日9”不是官方出的某个固定打卡活动也不是某个老师的统一作业而是我给自己定的一条刷题纪律。核心意思很简单每天在力扣平台上完成9道算法题的练习雷打不动地执行一段时间。这9道题不是随机乱点而是按照难度、知识点、题型分布预先排好的顺序来推覆盖数组、链表、字符串、二叉树、动态规划这些高频区间顺带复习以前已经做过的题。之所以选“9”这个数字是因为我之前试过每天5道太松下班回来一放松就只做两三道也试过每天15道撑了两周就疲了到了后期纯粹赶数量做题变成了抄答案根本不进脑子。9道题是刚好卡在“能完成”和“有压力”之间的一个量级实测下来每天投入两到三个小时能端到端走完不会影响正常工作和休息。这个计划的目标也不是“刷完一千题然后签约大厂”那种遥不可及的flag。我给自己定的目标是两个层面短期目标是形成高频题型的肌肉记忆见到数组翻转、二叉树遍历、动态规划入门题就能秒出思路长期目标是建立自己的刷题知识库把零散的解题法沉淀成一套能复用的模板。所以“每日9”不是单纯的数量竞赛而是一个带有复习节奏、分类策略、复盘机制的训练循环。这篇文章会把我的完整做法、题目怎么挑、时间怎么分、笔记怎么做、踩过哪些坑全部摊开来写一遍希望能给正在规划刷题路线的朋友一些参考。适合看这篇内容的人我觉得主要有三类一类是准备面试、很快要集中刷题却不知道怎么下手的求职者一类是已经刷了不少题但进度混乱、感觉刷过就忘的在职开发者还有一类是想给学生讲清楚算法刷题方法的人。无论你基础怎么样从每天9道这个节奏切入都比直接从题库第一千题开始硬啃要稳妥得多。2. 为什么数字定在9一天9道的逻辑拆解2.1 不是5也不是159这个量级到底意味着什么刷题强度这件事我觉得大多数人一开始都会走两个极端。第一个极端是高估自己下班后的自控力一开始定每天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道题这个计划的骨架依然稳稳立在那里。