刷题刷到第120多题的时候,我发现一个很有意思的现象:很多人不是被某道难题劝退的,而是被“每天都要做新题”这件事本身消耗掉的。3月6日这天,我的计划表上写的是127-129题,三题连做,看起来稀疏平常,但就是这个“稀疏平常”的节奏,才是刷题计划真正开始起作用的时刻。这篇内容我不仅会聊聊这三道题所在阶段的特点,更重要的是想完整分享一下:当你的刷题进度推进到这个位置时,整个计划该如何设计、每一道题该怎么拆、错题该怎么消化,以及遇到“不想刷了”“刷了也白刷”的情绪时怎么把状态拉回来。
这篇文章适合那些已经开始刷题、但隐约觉得进度停滞或者只是机械打卡的人看。不管你做的是哪个题库、编号规则是否一致,120多题这个区间代表的“从入门到进阶的过渡段”,方法论都是通用的。
1. 为什么要把刷题当成一个“每日计划”来经营
1.1 刷题计划的核心是先解决“坚持”这个工程问题
刷题这件事,从技术层面看考的是数据结构和算法功底,但从执行层面看,它本质上是个工程问题:你如何设计一套系统,让“每天刷题”这件事能够低成本地持续运转下去。
很多人一开始热情很高,第一天刷5题,第二天刷4题,第三天刷3题,然后周末断档,再然后整个计划报废。这不是意志力的问题,是计划设计的问题。人类大脑天然倾向于选择阻力最小的路径,如果每天开始刷题前都要纠结“今天刷什么”“从哪里开始”,那股纠结劲儿本身就足以消耗掉大半的自律储备。
所以我把刷题计划设计成固定节奏:每天三题,周一至周日无特殊情况不中断。这个“固定”本身就是最大的省力设计。到了3月6日,我甚至不需要思考,就知道今天的任务是127-129题。大脑不用做决策,行动阻力自然降到最低,执行力反而最高。
1.2 127-129题这个位置:从新鲜感进入平台期
每个刷题者都会经历三个阶段:最初30题是新鲜感驱动的蜜月期,不管难题简单题都充满好奇;中间60-100题是能力爬坡期,能明显感觉到自己在变强;而到第120题左右,真正的考验来了——你已经见过足够多的题型,新鲜感消耗殆尽,又没有强到可以碾压一切题目,此时最容易产生“我刷这些到底有没有用”的怀疑。
3月6日的127-129题恰好落在这个敏感区间。这个位置的题目往往有一个共同特征:不再是纯粹考某一个知识点,而是开始把多个知识点糅合在一起。可能一道题既要处理输入边界、又要设计状态转移,还可能涉及某种优化技巧。这和三四十题时“你知道用哈希表就能过”的模块化题目完全不同。
如果这时候你还在用刷数量的思维去做题,就会发现自己越来越吃力,甚至开始怀疑自己前一百题是不是白刷了。其实不是白刷,而是题目对你的要求从“会做”升级到了“会分析”。
1.3 计划设计里的几个关键参数
一个健康的刷题计划,至少需要三个参数:每日题量、题目难度配比、复习频率。这三个参数缺一个,计划就会出问题。
每日题量我建议固定在2-3题。别小看这个数字,它的意义不在于“量”而在于“可持续性”。每天10题你只能坚持两天,每天3题你可以坚持三个月。后者才是真正能改变你能力结构的东西。
难度配比上,我常用的比例是1:1:1——一道简单题热身、一道中等题主力思考、一道困难题尝试突破。这种配比的好处是:你的自信心不会因为连续卡难题而崩溃,同时又能保证每天都在接触有挑战性的内容。以127-129题为例,如果三道题难度分布均衡,我一般会先做那道简单的建立手感,把中等题作为今天的核心战场,困难题就尽力拆解、不强求一次通过。
复习频率上,我采用“每周滚动复习”的机制,这个后面我会单独展开说。
2. 三道题的正确打开方式:一套可复用的做题流程
2.1 拿到题目后的10分钟:读题与自我提问
很多人刷题效率低的第一个原因,是读题不仔细。不是不识字,而是没有带着问题去读。我拿到127题时,会先花30秒通读一遍题目,然后用10分钟做四件事:
第一,确认输入输出的边界。数据范围是多少?是否允许为空?有没有超大数值的情况?很多题目难不是难在算法本身,而是边界条件极其隐蔽。
第二,抽象问题的本质。这题在考什么?是数组遍历、双指针、动态规划还是图搜索?不要管题目的故事包装,把它扒干净,露出底层的算法骨架。
第三,思考暴力解是什么。不要上来就想最优解,先确认最朴素的做法是什么,复杂度是多少。很多时候暴力解想清楚了,优化的方向也就自然浮现了。
第四,估算优化目标。题目要求的复杂度大概在什么量级?如果数据规模是10的5次方,那么O(n^2)基本就悬了;如果是10的3次方,O(n^2)可能还够用。
这10分钟的价值不是让你直接写出答案,而是让你的大脑进入“这道题的上下文”里。很多人在题解区看别人的解法觉得很简单,但轮到自己做就卡住,核心原因就是跳过了这10分钟的上下文建立过程。
2.2 卡住之后怎么查资料,才是真正的分水岭
刷题到了120题以后,你一定会频繁遇到“想了半小时还毫无头绪”的情况。此时查不查题解、怎么查题解,是区分有效刷题和无效刷题的分水岭。
我的规则很简单:30分钟以内绝不查任何外部资料。这30分钟里你可以反复读题、画样例、尝试不同的数据结构原型、甚至去白纸上模拟算法的执行过程。实在没思路,我会把题目先放到一边,去做今天的第二题,让潜意识在后台处理。
超过30分钟依然卡住,这才允许查题解。但查题解时有个大忌——不要直接翻到最后看代码。先把题解的思路描述读了,关上页面,自己重新写。哪怕写出个有bug的版本也没关系,关键是“基于思路提示的重新实现”这一整个思维过程,要由你自己完成。
如果你直接照着题解把代码抄一遍,你获得的是“看得懂”的幻觉,而丢失的是“写得出来”的真实能力。这两种能力之间的落差,会在你后续遇到同类型新题时彻底暴露。
2.3 三种题型的通用应对思路
虽然我不知道127-129题具体的内容,但到了这个题量区间,常见的高频考察类型基本可以用三条思路覆盖:
第一,遍历类问题。核心是双指针和前缀和的组合运用。看到“连续子数组”“区间查询”这类关键词,不要慌,先考虑能否通过双指针维护一个滑动窗口,或者用前缀和把区间问题变成差值比较。这类问题的优化方向几乎永远是“减少重复计算”。
第二,状态决策类问题。核心是动态规划或贪心。这类题的最大误区是试图一次找到完美的递推公式。实操中我建议先定义状态,再推转移方程,最后才考虑压缩状态空间。三个步骤不要跳步,很多你以为是贪心的问题,实际上是动态规划可以解决的。判断标准也很简单:局部最优是否能推导全局最优?不确定时就老老实实写动态规划。
第三,结构建模类问题。核心是栈、队列、哈希表的灵活运用。这类题往往用一个辅助数据结构就能把时间复杂度降一个量级。看到括号匹配、表达式求值之类,第一反应是栈;看到统计频次、去重、查找,第一反应是哈希表。
这三条思路在120题这个阶段会反复出现。当你刷到一定量时,会发现题目虽然千变万化,但底层的解题模板是有限的。你要做的事情,就是在每一次做题中强化这些模板的匹配速度。
3. 复盘比做新题更重要:我的笔记与错题整理方法
3.1 错题本不用精美,但必须能“触发回忆”
很多人的错题本做得跟手账一样精致,五颜六色标注、贴纸装饰,但做完之后再也没翻开过。这是本末倒置了。错题本的核心价值只有一个:当你在未来某一天回看时,能够瞬间回忆起当时的思维卡点。
我的错题本格式极其简陋——每题一行状态标记,加两三句当时的错误原因。比如“127题:审题漏了‘非负整数’,导致初始化出错”“128题:想用贪心但是正解是动态规划,注意区间重叠的边界处理”。这些话不是什么漂亮话,但它们能精准触发记忆。
关键是状态标记。我用三个符号:已搞定、待重做、彻底放弃。已搞定表示这道题我已经能独立写出来;待重做表示我看了解析但还没法独立完成;彻底放弃表示这道题超出当前水平,先跳过,过三个月再来。每一周我会定期复习“待重做”的题目,直到它们被挪进“已搞定”。
3.2 提炼模板与套路,让一道题变成一类题
刷题效率高的本质,不是碰到原题能默写,而是碰到新题能归类。归类能力从哪来?从刷完一道题之后的主动提炼中来。
具体做法是:每做完一道值得记的题,用三句话总结它。第一句是题型归类,比如“区间合并类”“单调栈求下一个更大元素”;第二句是核心算法思路,比如“按起点排序,遍历时维护当前区间的终点”;第三句是复杂度特征,比如“O(n log n)排序加O(n)扫描”。
这三句话写下来,一道题就脱离了具体的题目包装,变成了一个可迁移的抽象模型。三个月后你再遇到一道新题,哪怕题干完全不一样,但只要你能识别出“这是区间合并的变体”,你就能立刻调用模板的框架去套。
3.3 每周滚动复习:怎么安排才不会变成自我感动
复盘最容易出现的问题是:攒了满满一个错题本,但从不回头复习。这实际上是在用收集的勤奋,掩盖消化的懒惰。我的解法是每周日固定做一轮滚动复习。
复习对象只选两类题:上周的“待重做”和上周“已搞定”里最不熟练的几道。复习方式也很朴素——直接在白板上写代码,不查任何资料。写不出来的题降级回“待重做”,写出来的就继续留在“已搞定”。这套机制看起来简单,但坚持下来,你三个月后回头看3月6日做的127-129题时,会清晰地记得哪些知识点当时没吃透、后来是怎么补上的。
滚动复习还有个容易被忽略的细节:别贪多。每周安排3-5道复习题就够了。复习的目的是激活记忆,不是创造新学习量。如果你把一周所有的新题时间都拿来做复习了,计划一样会失衡。
4. 常见问题与排查技巧实录
4.1 今天就是不想刷,怎么办
每个人都会遇到这种日子。疲惫、烦躁、打游戏上头、工作加班,总之就是不想碰题。很多人这时候会直接断掉,然后第二天愧疚感爆发,想一口气刷五题弥补,结果第三天又断了,陷入恶性循环。
我的经验是:状态不好时,可以把“刷题”降级为“看题”。不看题解,只把今天的题目读一遍,想想思路,然后写一句话总结放到笔记里。这十几分钟的投入虽然不起眼,但它保持了和题目的接触,保住了习惯的连续性。等到状态恢复时,你会发现自己并没有完全脱节,重拾起来非常自然。
克服完美主义的执念,告诉自己“今天的目标不是解出题目,而是保住习惯”,执行力反而更容易维持。
4.2 刷了题还是不会做,是方法错了吗
这是120题阶段最让人沮丧的场景:这道题我明明刷过类似题型,怎么换个说法就不会了?先别急着自我怀疑,这大概率不是你的问题,而是刷题阶段必然经历的“从具体到抽象”的转换过程。
你觉得自己“刷过了”,但复盘时很容易发现,当时其实是背下了那道题的具体解法,而不是掌握了这类题型的通用方法。真正的检验方式是:下周重新做一遍这道题,如果写不出来,说明上周的做题过程是无效的。
解决办法前面已经说过——提炼模板、滚动复习。如果你发现自己大量题目都处于“刷过但不会做”的状态,问题可能出在每题花的时间太短上。适当把每日题量从3题降到2题,把省出来的时间用来做深度总结,效果往往更好。
4.3 刷题速度慢、效率低,怎么调整
刷题速度慢通常来自两个原因:一是代码基本功还不过关,for循环、递归、指针操作这类基础不熟练,导致脑子里明明有思路但手写不出来;二是题目拆解的粒度太大,总想一口气从0写到AC,中间缺少步骤化的推进方式。
针对第一种情况,没有捷径,就是加强基础语法的刻意练习,比如不借助IDE自动补全,纯手写数组反转、链表合并这类常用代码段。针对第二种情况,把一次AC的目标改成阶段性子目标:先写出能跑的暴力解,再跑通测试样例,最后优化复杂度。这三个阶段中间可以间隔开,不一定非要一次完成。
如果你每次都在一道题上磨两三个小时,说明你选的题目难度已经超出了当前能力区。退一步,把难度配比里的“困难题”换成“中等偏难题”,把自信和进度先稳住,比死磕一道题划算得多。
5. 节奏与心态:把长期主义落实到每一天
5.1 接受波动,但不接受中断
刷题计划执行到第120题以后,你会发现一个规律:状态是波动的,有高峰有低谷,但连续性才是决定复利效应的关键。哪怕某天只做了两道简单题,也比断掉强一百倍。
我给自己定了一条铁律:可以降低单日强度,但绝不空过一天。这条铁律帮我度过了好几次想放弃的时期。因为一旦打破一次“全勤”,大脑就会获得一个“计划可以中断”的许可,之后中断的频率会越来越高。守住连续性,就是守住了计划和大脑之间建立的信任契约。
3月6日之所以值得记录下来,不是因为这天刷了多难的题,而是它作为连续计划中的一个普通节点,见证了长期主义如何通过每一天的小动作发挥作用。
5.2 用数据说话:如何给自己做周复盘
我每个周日会花20分钟做一个简单的统计:本周刷了多少题、AC率多少、待重做多少、哪些类型的模板被调用了。这些数据看起来枯燥,但它们是客观反馈,能直接告诉我计划哪里出了问题。
比如连续三周AC率都在下滑,我就要考虑是不是题目难度配比太高,或者最近精力状态差。比如某一类题型反复出错,我就要审视自己对该知识点的理解是不是有漏洞。数据不会骗人,它比“感觉最近还挺努力”靠谱得多。
一个简单好用的统计方法是维护一个表格,记录日期、题号、题型分类、是否一次AC、错误原因。这样到周末汇总时,所有问题一目了然。
5.3 一点实在的经验总结
刷题这件事,归根结底拼的不是智力和天赋,而是信息管理能力和情绪调节能力。你会不会从每道题里提取别人看不见的规律?你能不能在自己状态崩坏时依然完成最低限度的动作?这两个能力,比任何奇技淫巧都值钱。
关于每日三题的时间安排,我最后再分享一个亲测有效的小技巧:把最难的那道题放在你一天中精力最好的时段处理。有的人是早晨,有的人是下午,你自己最清楚。把困难题排在状态最好的时间,能极大降低挫败感,简单题留在晚上甚至状态差的时候做都可以。这个细节看起来不起眼,但长期执行下来,整个刷题体验的顺滑度会提升很多。
3月6日,周四,我按计划刷完了127、128、129三题。三道题里有一道写了错误代码然后自己调试出了正确版本,有一道看了思路提示才解出来,还有一道算是顺利AC。这一天没有任何惊艳的突破,但它安安静静地推进了我的能力边界。这大概就是持续刷题最真实的模样。