1. 刷题笔记的正确打开方式从记录到复盘先说个扎心的现实很多人刷题就是打开题库、看题、想了十分钟、没思路、看题解、恍然大悟、关掉页面过两天再遇到同类型题目大脑依旧一片空白。这种“眼睛会了手不会”的状态几乎每个刷题人都经历过。我自己也踩过这个坑一直到后来改变笔记策略才真正把刷题变成了可积累、可复用的资产。这篇笔记记录的是我近期刷题过程中沉淀下来的一套做法顺手把踩过的坑和优化思路都整理出来。如果你也是那种刷了两百题还是觉得没底、看到新题就发慌的状态那这套笔记方法论应该能给你一点启发。题海战术从来不是核心核心是你有没有把每一道题吃透而吃透的标志就是你能不能写出那份属于自己的刷题笔记。先说结论一份合格的刷题笔记至少要包含三块内容——题目背后的考点拆解、你自己从不会到会的完整思考链路以及一类题型通用的解题模板。缺了任何一块笔记都只是题解的搬运工。后面我会一步步展开讲这三块分别怎么做为什么非做不可。这份笔记适合谁非常适合准备面试、考研机试、算法竞赛入门或者纯粹想提升代码功底的人。不管你现在刷的是数组、链表、二叉树还是动态规划思路都通用。区别只在于不同知识点的抽象程度不一样记录的方式要做微调这一点我会在后面的章节单独讲。2. 刷题前必须想清楚的三件事2.1 你刷题到底是为了什么这个问题听起来很废话但实际操作中我发现刷题目标不同笔记的写法完全不同。如果你是为了应付面试那笔记的重心应该是“高频题型”和“白板代码熟练度”。你不太需要去抠最刁钻的数学证明而是要保证拿到题能快速定位考点、写出干净无 bug 的代码、讲清楚复杂度。这时候笔记里就应该多记录题目的常见变形、面试官可能追问的方向。如果你是为了竞赛那笔记的重心就变成了“算法套路库”。竞赛题很多是复合考点一道题里同时考察数据结构、数学推导和边界处理笔记里需要把每一层拆开记下当年自己在推导过程中卡住的位置以及这个卡点对应的突破口。如果你只是普通的技术提升那笔记更偏向于“理解型”。你可能不需要高频刷题但每道题都值得深挖把原理和直觉打通。这种笔记会偏长但写完后你对一类题型的理解会非常通透。我自己经历下来最怕的就是目标混乱。今天为面试刷题明天又转去死磕竞赛题笔记风格来回跳最后两边都做不好。建议你动手写第一篇笔记前先花十分钟想清楚自己的目标然后就不要随意摇摆。2.2 刷题量多少才算够相关热词中“题”字出现频率很高说明很多人都卡在数量焦虑上。我也曾经立过“每天五题”“刷满五百题”这种 flag后来发现纯粹是自欺欺人。有些题刷了就忘有些题刷三遍还是记不住数量堆上去除了自我感动没有太大意义。我个人的经验是把刷题量分成三层来对待。第一层是入门熟悉期大概五十题左右目的是熟悉常见的数据结构和基础算法这个阶段可以追求覆盖面尽量多接触不同类型的题目。第二层是专题突破期按知识点分模块刷比如动态规划刷四十题、二叉树刷三十题这时候不要追求数量而是把一个类型的题吃透再进入下一个类型。第三层是模拟冲刺期按真实场景做套题训练检验自己能不能在限时环境下稳定输出。你可以算一笔账假设你计划用三个月准备面试前一个月是熟悉期中间一个月是专题期最后一个月是冲刺期那么总量大概在一百五十题左右。这个数量不算夸张但如果每一题都认真写笔记、做复盘效果远好过囫囵吞枣刷五百题。2.3 笔记工具怎么选工具选择这件事我折腾过很久从纸质笔记本到各种笔记软件都用过。最后沉淀下来的组合是本地用 Markdown 编辑器做主力笔记配合版本管理工具做归档再用一个轻量的网页工具画思路图。为什么最终选择 Markdown因为刷题笔记里大量涉及代码块、数学公式和列表结构Markdown 的纯文本特性让这些内容非常干净而且方便检索、方便迁移。你可以随时把一篇笔记转成 PDF 分享出去也可以在整个笔记库里面做全文搜索效率远高于纸质笔记。选工具时要避免一个误区不要在笔记美化上花太多时间。有些笔记软件支持各种主题、标签、数据库、双链功能很强大但也非常容易让人沉迷于“装修笔记”而忽略了真正的思考。刷题笔记的核心价值是记录你的思考过程不是做一份精美的知识管理演示文稿。工具能用就好把省下来的时间花在解题和复盘上面。3. 单题笔记的五个核心段落3.1 题面和考点的重新表述很多人记笔记时习惯把原题直接粘贴进去然后写个题解代码就是一篇笔记。这个做法我觉得意义不大因为粘贴过来的题面是别人的语言你的大脑没有真正参与加工。更好的做法是看完题之后先把页面关掉用自己的话把题目重写一遍。重新表述的过程会强迫你理解题目的输入输出、数据范围以及真正要求解的问题是什么。如果你能把这个表述写清楚说明你已经看懂题了如果你写出来的表述模棱两可那你大概率还没抓住核心。重新表述之后再写下这道题的考点标签。比如“数组 双指针”“哈希表 滑动窗口”“树形 DP”。第一次写标签你可能只会写“数组”“字符串”这种粗粒度标签没关系刷多了之后你会慢慢学会更精确的标签比如“同向双指针”“原地哈希”“单调栈维护区间”。标签越精确后续复习时定位越准。考点标签的作用在复习时非常明显。比如你打算复习“滑动窗口”这个模块直接搜索笔记库里的标签所有相关题目一次性列出来比你在题库里一题一题翻要高效得多。3.2 你的思考路径记录这一部分是我认为整篇笔记最值钱的地方也是绝大多数人最容易忽略的地方。很多题解文档里只有“解法 复杂度 代码”看起来很标准但对你自己的提升很有限。你需要记录的是你在拿到这道题之后脑子里的完整活动路径看到数据范围第一反应是什么第一次想到的解法是什么为什么觉得可以最后为什么放弃了卡住的时候卡在哪个点是边界条件想不清楚还是状态转移方程推不下去看了题解之后哪一句话让你豁然开朗你和题解之间的思维差距到底在哪里这些内容写起来很琐碎但它们是你思维的真实切片。每当你复习这道题时看着这份记录你会清晰地看到那条从“不会”到“会”的路径。更关键的是很多题卡住的本质原因是一样的记录多了之后你会发现自己反复在同类地方翻车这时就可以针对性地做专项强化。我见过一种挺有效的记录方式把思考路径写成两列对比左边是“我原来的想法”右边是“正确的思路”。中间用一句话点出关键转折。这个格式看起来很朴素但复盘时一眼就能找到自己的问题所在。3.3 核心解法拆解与复杂度分析写解法时不要只写代码要把解法拆成相对独立的步骤每一步说明它到底在解决什么问题。比如一道经典的“两数之和”表面上是哈希表存补数但背后其实是一个“空间换时间”的经典思想把查找时间从遍历降为哈希查询。复杂度分析不能只写一个“O(n)”你得能解释清楚为什么是 O(n)空间 O(n) 体现在哪有没有办法把空间复杂度降下来代价是什么这些追问会推动你从“背模板”走向“真正可控”。我自己的习惯是每道题至少追问一个复杂度优化方向。如果一道题的标准解法是 O(n) 空间会想一下有没有 O(1) 空间的版本如果需要排序预处理那排序本身对复杂度的影响是什么这些额外思考不一定每次都有结果但思考过程本身就是一种训练。3.4 代码实现与细节坑位这一步把你最终验证通过的代码粘贴进来但不要整段贴完就结束。你要把代码里那些容易写错、容易踩坑的位置单独拎出来加注释说明。举几个我自己常见的坑位类型。一个是循环边界比如二分查找里left和right的取值到底是互斥还是包含关系另一个是数据溢出比如乘法中间结果会不会超出类型上限还有一个是空值判断比如链表题里空链表、单节点链表的边界处理。这些细节单独提取出来写是因为它们具有极强的复用价值。你踩过的边界坑很可能换一道题还会踩。把这些细节整理成清单做题前后对照一下能有效降低错误率。另外建议给每段代码标注“本题关键代码”和“可复用模板代码”。关键代码是跟这道题强相关的部分可复用模板则是那些抽出来之后能用到其他题目里的骨架比如二叉树的递归遍历框架、二分查找的通用框架等。随着笔记数量增加你会逐渐积累出自己的代码模板库。3.5 同类题的横向对比一道题做完如果你能找到两三个同类题进行对比那就开始建立知识网络了。把这几道题放在一起比较它们的相同点和差异点提炼出解决这一类问题的通用框架比单纯多刷几道题有价值得多。举个例子你连续刷了“接雨水”“最大矩形”“柱状图中最大的矩形”这一组题会发现它们都涉及到“找边界”这一核心操作区别只是用单调栈维护的索引信息不同。你可以在笔记里画一个小表格把题目、数据范围、核心数据结构、遍历方向列出来一眼看清这一类题的演化脉络。横向对比还能帮你发现自己对某个知识点理解不够深入。比如你对比后发现几道所谓不同类的题目实际上都能转换成同一种模型那说明你对模型的抽象程度还不够。继续深挖下去你对一类问题的理解就会从“会做某几道题”上升为“掌握这一类模型”。4. 按知识点整理的分类笔记法4.1 为什么要做分类笔记单题笔记解决的是“这道题怎么做”但如果只停留在单题笔记你的知识结构会是碎片化的。今天刷一道数组题明天刷一道图论题彼此之间没有联系遇到综合题就抓瞎。分类笔记的价值在于把散落的单题笔记按照知识点重新组织形成所谓的“题单”或“专题”。每一类知识点下面你可以汇总相关的题、相关的模板、相关的易错点形成一个完整的知识块。这个做法本质上是在给自己的大脑做外挂。你不需要把所有解法都记在脑子里你只需要记住每个知识点的导航结构这个知识点下面有哪些题、核心框架是什么、常见的坑在哪里。做题时调取到对应知识点再从记忆里把细节展开。我建议至少给这些高频考点建分类文件夹数组与指针、哈希表、字符串、链表、栈与队列、树与二叉树、图、搜索回溯、动态规划、贪心、二分、数学。某些类型里题目特别多的比如动态规划可以再拆成线性 DP、背包 DP、区间 DP、树形 DP 等子类。4.2 分类笔记的整理节奏分类笔记不建议一次集中整理而是建议“每次刷完题后顺手归档”。刷完三道动态规划的题就把这三道题的链接和核心解法更新到动态规划分类下。这样你的笔记库始终保持着热度和连续不用等复习时一次性面对堆积如山的素材。我自己的节奏是每天刷题结束后用十五分钟做归档动作。把当天的单题笔记更新到对应分类检查一下分类里有没有内容重复的条目顺手把一些过时的链接修正掉。别小看这十五分钟坚持一个月后你的笔记库会非常齐整。每周再做一次整体检视。打开每个分类文件夹看看哪些分类内容特别少、哪些分类内容乱糟糟的。内容特别少的分类要么说明你知识点覆盖不够要么说明这个分类的题目定义得过细了需要合并。内容乱糟糟的则说明归档不及时需要重新梳理。4.3 分类之间的关联建立分类之间不是孤立的。刷到后面你会发现一道题往往是几个知识点的综合体。这种时候单题笔记的标签就派上用场了。你可以在分类笔记里做交叉引用比如在树的分支里刷到一道题解法核心其实是“树的遍历 哈希表”那就同时在树和哈希表两个分类里留下对应记录。这种交叉做法一开始会显得繁琐但当你复习时能体会到巨大优势。你想复习哈希表能同时看到数组和树的哈希应用你想复习树的遍历又能看到某些哈希题里隐含的树模型。还有一点值得做每个分类的头部写一段“知识地图”。不是详细解法而是用几句话概括这个知识点的核心思想、典型题型的识别特点、易错点和常见复杂度。这段知识地图你可以随着刷题不断修订。它对你快速定位题目、建立全局观帮助极大。5. 刷题记录里的复盘与迭代5.1 二刷三刷时的对比刷题笔记不是写完就锁死的它应该是活文档。你会反复刷同一道题每次的笔记都值得追加记录。二刷时重点看什么看第一遍写下的思考路径看当时卡在哪儿看第二次能不能不看题解直接顺利做出来。如果你第二次依然卡在同样的点上说明这个题目对应的知识点还没掌握牢需要回到分类笔记里重新学习核心框架。三刷时重点就是熟练度和加速度。能不能快速识别出考点能不能直接写出可运行的清爽代码能不能一眼看出边界条件的坑。如果你能稳定做到这些这道题就可以从你的“重点复习列表”移动到“已完成列表”。很多人的误区是一道题只刷一遍然后刷够数量就去换新题。但我个人的体会是一道高质量题目做三遍比做三道类似的题收获要大。第一遍建立认知第二遍巩固框架第三遍形成肌肉记忆。三遍之后这道题才真正成为你的东西。5.2 周度和月度复盘怎么做复盘是笔记方法中最后一个关键环节。没有复盘你积累的笔记就只是一堆安静的 Markdown 文件。周复盘建议围绕三个问题展开这一周刷了多少题有几道题第一次就能顺利做出来有几道题反复看了多次题解才搞明白把这三类数据记录在周复盘笔记里。连续记录几周后你能看出自己的学习趋势是渐渐变好还是在原地打转。月度复盘做得更粗粒度一些这个月的整体进度如何计划完成了吗如果没完成是刷题量安排过重还是某个知识点花了超出预期的时间下个月需要调整的方向是什么复盘的输出物不要求精美哪怕只是几条要点也行。它的价值在于强迫你跳出逐题刷的状态从一个更高的视角观察自己的学习过程。没有复盘刷题很容易变成体力劳动有了复盘刷题才会变成智力投资。5.3 如何面对刷不下去的瓶颈期刷题遇到瓶颈太正常了。连续几天状态差、题目刷不动、思路打不开几乎人人都会经历。这时候笔记能帮你做的事是让你看到自己过去的进步曲线。当你觉得这周特别挫败时翻一翻几周前的笔记看看当时的自己连这道“简单题”都搞不定而现在能做中等难度的题了。这种对比带来的信心比灌鸡汤有用得多。瓶颈期还有一个很常见的成因基础知识不牢被题目中隐含的前置要求卡住了。如果你刷回溯时反复卡壳大概率是递归基础不够扎实。这时候不要硬刚难题退回分类笔记重新刷一遍递归相关的入门题把基础补上再来挑战。这个回退动作特别重要永远不要觉得刷简单题是浪费时间有时候慢才是快。另外我还会在瓶颈期做一件有意思的事随机挑一个已经完全掌握的旧题不看代码重新手写一遍。这个动作能帮你找回顺畅的做题感觉快速恢复信心而且能检验你的记忆是不是停留在“看懂了”而不是“会写了”。6. 笔记库的维护与工具链整合6.1 多端的同步与备份刷题笔记有一个特点你会在地铁上、电脑前、咖啡馆里等不同场景随时产生灵感。所以笔记的同步和备份很重要。我的方案是使用支持命令行操作的 Markdown 笔记库配合一个网盘同步目录。笔记库本身用版本管理工具建档每次修改提交一次网盘负责跨设备实时同步。这样既能保证修改记录完整可追踪又能让手机端和电脑端内容保持一致。这个方案的备份安全性也很好。网盘做一份备份版本管理仓库远程再做一份备份双保险。即使本地磁盘挂了也能快速恢复全部笔记。刷题笔记是你长期投入的心血不能因为一次硬盘故障就全部归零。如果你对命令行工具不熟悉也可以用带同步功能的笔记软件核心原则一样支持 Markdown、支持全文检索、支持多端同步、支持历史版本。满足这四点工具选什么就是个人喜好的问题了。6.2 检索与复习的调用方式笔记库只有能快速检索才有复习价值。Markdown 全文检索能帮你做到跨所有笔记的内容搜索这比在纸质本里翻页找内容高效太多。常用的检索场景有几个按标签搜题目、按关键词搜算法名、按分类目录浏览某一类题型。这些操作本质上都是查笔记库中的某一类资料区别是颗粒度不同。刷题前可以快速搜一下这个知识点下自己做了哪些题加深对已有知识储备的印象复习时直接按分类章节完整过一遍。复习时我还习惯给每篇单题笔记加一个状态标记未掌握、熟悉中、已掌握。搜索时按状态筛出“未掌握”的题这部分就是你最需要投入时间复习的清单。每次复习完成后更新状态标记慢慢地把“未掌握”清单清空。6.3 阶段性输出与分享笔记做到一定规模后试着输出一些阶段性总结。比如写完动态规划专题后输出一篇《我如何刷完三十道动态规划题》的总结文章。这个动作会把你的零散笔记系统化因为输出时需要重新组织逻辑顺序、提炼核心结构是种极好的二次学习。输出总结时不需要追求面面俱到你可以只挑你体会最深的三到五个点展开。比如对你冲击最大的一个思维转换、你最容易犯的一个错误、你总结出的一个解题模板。这些内容因为来自真实实践写出来会非常有份量对他人也有实际参考价值。分享渠道随意博客、社区、技术论坛都行。有人反馈当然好没人反馈也没关系写总结本质上是写给自己的。我的体会是每一次阶段性输出之后我对相关知识点和笔记库结构的理解都会更上一层台阶。7. 常见问题速查与避坑心得7.1 刷题笔记常见问题速查表问题症状解决方案笔记成了题解搬运记录里只有题目和标准代码没有自己的想法强制要求自己重写题面、记录思考路径哪怕写得很粗糙笔记写完不复看笔记本越积越多但从不回去翻设置每周固定复盘时间基于状态标记筛出“未掌握”题目分类混乱同一个知识点分散在多个文件夹搜索也搜不全每周做一次归档检查把新题归入对应分类统一标签规范只记单题不总结做了很多题但提取不出通用的解法模板每做完一类题强制建一个专题笔记写该类型的通用框架笔记里全是代码代码照搬标准题解算法思想完全没记录下来每段代码补充说明它解决什么问题以及代码里的关键坑位过度追求排版时间花在调整格式上真正思考时间反而少接受“先粗糙后完善”优先记录思考过程排版放在复习前统一调整7.2 几个容易被忽略的细节第一个细节数据范围一定要记录。刷题时你看到的每个数据范围都是有意义的信息。n 10可能暗示暴力搜索n 10^5说明时间复杂度得控制在 O(n log n)n 10^9基本排除线性解法。把数据范围写在笔记开头下次复习时能快速回忆起复杂度约束条件。第二个细节状态转移方程不只是写出来要注释每一步的意义。很多动态规划笔记里写着dp[i] max(dp[i-1] nums[i], nums[i])但完全不解释dp[i]代表什么。建议每次写方程时都把下标含义、初始化值、遍历顺序三个内容用文字写清楚。我见过太多人抄对了方程却不理解含义换一道变体题就直接歇菜。第三个细节代码里的中间调试过程也值得留一点记录。很多人刷题时跑出错误结果会不断加打印语句来排查。这些调试过程虽然看起来不正式但记录下“这里我以为是边界问题调试后发现是初始化顺序错了”能让后续复习时非常快速地避开同类错误。7.3 几个实用习惯习惯一每天固定时间刷题。我一般在晚上精力相对集中的时段刷题刷完十五分钟整理归档。这个节奏坚持下来之后身体和精神会形成惯性到点自动进入状态。习惯二每道题给自己定一个“思考截止时间”。新手可能二十分钟熟练后缩短到十分钟。时间到了还没有思路就直接看题解但要完整记录下自己卡住的位置。这个习惯能防止你在某道题上无限地死磕保证刷题节奏持续推进。习惯三偶尔手写代码。不是用笔写在纸上那么夸张而是打开一个空白编辑器不依赖自动补全不复制自己以前的代码纯靠记忆敲完整个解法。这能极好地检验你是否真的掌握了代码框架尤其是面试场景下白板写码的朋友一定得多练这个动作。8. 个人体会与小技巧分享写到这里按我的习惯分享几个从实践中沉淀出来的小技巧。第一个小技巧刷题笔记的模板不要固定死周期性地调整。我刚起步时的模板很简单只有题面、代码、复杂度。刷了三十题后觉得不够用加了“思考路径”板块。又刷了一阵子发现“横向对比”特别重要于是模板进化成现在的样子。模板越用越顺手不要怕折腾适合你当前状态的模板才是好模板。第二个小技巧去观察别人优秀笔记里那些让你“眼睛一亮”的段落。我每隔一段时间会去刷一些公开的题解和总结文章不是为了抄题解而是为了看别人怎么组织思路。看到好的表述方式我会顺手记下来改造后用到自己的笔记里。比如我现在笔记里常用的“卡点回顾”就是一种从别人题解里学来的结构。第三个小技巧千万别把笔记变成收藏夹。看到一份优秀总结就整个存下来、收到笔记库里这种动作显然很爽但绝大多数时候你存完就不会再看一眼。真正有效的做法是把别人的总结压缩成几句自己的话记在相关的分类笔记下面。经过你的语言系统重新编码过的内容才是真正被消化过的内容。这一步虽然花心思但也是拉开差距的关键。刷题笔记没有标准答案不同阶段的人适合不同的方式。我自己也是从最原始的“粘贴题解”一步步调整到现在的这套方法的。你能坚持刷题、愿意做记录就已经跑赢大多数人。剩下的只是迭代和优化的问题。找到自己舒服的节奏持续更新这套笔记系统你的刷题投入会越到后期越显价值。