ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

算法刷题笔记与复盘体系:从AC到内化,构建可检索的知识网络

算法刷题笔记与复盘体系:从AC到内化,构建可检索的知识网络 1月21号中午到22号晚上我终于下定决心把积压了快两个月的刷题计划真正落实了一轮。账号还是用了老IDhetao1733837登录进去就能看到这两天的提交记录。原本的计划是这两天猛刷一波用数量给自己一点心理安慰结果刷到当天晚上第七道题的时候就明显察觉到一个问题前面几道题的思路已经开始模糊了。当时我就知道如果不做笔记这两天刷完等于白刷。于是从21号下午开始我把这两天的核心任务从“多刷几道题”改成了“怎么把刷过的每一道题真正吃透”。这篇博文就是这次刷题周期的完整记录也是我目前一直在用的刷题笔记方法的完整拆解——适合那些刷了很多题但总觉得没沉淀的人也适合刚开始接触算法、想建立一个可持续记录体系的读者。1. 为什么这次刷题周期我坚持“笔记先行”先说一个反直觉的结论做题本身不会让你进步做题后的复盘才会。我见过太多人刷题记录有几百条但问起某道题的解法思路只能说“好像做过”。这就是典型的“刷过”和“掌握”之间的落差。这次我给自己定的规则是宁可少做一半题也必须保证每道题都有一份完整的笔记产出。1.1 从“AC”到“内化”差了多远一道题从“通过评测”到“真正属于你”中间至少隔了三个关键步骤你能否在不看题解的情况下把完整思路口头讲清楚你能否说清楚这个解法的时间复杂度和空间复杂度以及为什么不能更优你能否举出一个变体条件说明原解法在什么情况下会失效2016年的时候我刷题从来不写笔记觉得“我会做就行了”。后来面试的时候被面试官追着问了三个“为什么”当场卡住。从那以后我就意识到评测系统只会告诉你答案对不对不会告诉你理解够不够深。记录笔记的过程本质上是逼着自己把零散的思路整理成有逻辑的链条这个链条才是真正能迁移到新题目上用的东西。1.2 遗忘曲线决定了你必须留点东西艾宾浩斯遗忘曲线大家都听说过但真正把它用到刷题里的人不多。我在这次刷题周期里做过一个小测试21号上午用二十分钟看完的一道题没有做任何记录22号下午再看到这道题我只能回忆起“好像可以用哈希表”但具体怎么处理冲突、边界条件是什么完全想不起来。而同一天做过笔记的另外几道题22号回顾的时候几乎能直接写代码。所以笔记的核心作用不是给别人看的是给一周后、一个月后的自己看的。没有笔记的刷题等于在一根不断漏水的管子里灌水——你投入了大量时间最后留下的只有一点点。2. 一份能直接抄的刷题笔记模板这两天的刷题周期里我反复迭代了自己的笔记模板到22号晚上基本定型。下面这个模板是我目前最推荐的结构直接复制到本地Markdown文件里就能用。# 题目名称 - 日期YYYY-MM-DD - 题源平台 / 题号 - 标签[数据结构] [算法思想] 可多个 - 难度简单 / 中等 / 困难 - 状态AC / 未AC / 复刷中 ## 题目关键信息 描述题目最核心的约束条件、数据范围、特殊边界 ## 我的第一思路 做题时的原始想法哪怕是错的也要写 ## 正确解法或审题后的优化解法 完整思路包括为什么这样设计、关键变量含义 ## 复杂度分析 - 时间复杂度O(?) - 空间复杂度O(?) ## 代码要点 核心代码段 容易写错的地方 ## 踩坑记录 本次提交中遇到的错误、卡住的原因 ## 变体与扩展 这道题能改成什么样子和哪些题相似 ## 一句话总结 用一句话概括这道题的核心考点2.1 每个字段都不是摆设我逐个说一下这个模板里最容易被忽略的字段“我的第一思路”这个字段是笔记里最有价值的部分。因为它记录的是你真实的思维起点——哪怕想错了也是重要的参考。当你一个月后回看笔记发现自己的第一思路从“暴力枚举”变成了“直接想到双指针”这就是肉眼可见的进步。很多人删掉这个字段只写正确解法等于丢掉了自己思维演进的证据。“踩坑记录”是第二有价值的字段。一道题真正让你长记性的肯定不是顺利通过的部分而是卡住你的那个地方。我在这次刷题周期里统计了一下会发现80%的踩坑集中在边界条件和数据范围上。把这些坑写进笔记相当于给未来的自己立了一面警告牌。“变体与扩展”这个字段决定了一道题的潜力。如果只是做一道记一道笔记是一本流水账。但如果你写完笔记后花五分钟想一想“这道题如果改一个条件解法还成立吗”那么一道题就能顶三道题。2.2 一句话总结怎么写“一句话总结”不是让你写“用哈希表解决”。而是要写出这道题与同类题本质不同的地方。举个例子差的写法用前缀和做。好的写法当需要在连续子数组中快速判断“和是否满足条件”时前缀和配哈希表可以把O(n^2)压缩到O(n)关键是除模的边界要处理负数。这才是判断题是否真正理解的方式。写不出来说明还没吃透哪怕AC了也值得再想一遍。3. 按什么维度给题目分类标签比文件夹更抗用刷题笔记做得久了一定会面临一个问题当笔记积累到几百条之后怎么快速找到想要的那道题我最早用的方法是建文件夹数组一个文件夹、链表一个文件夹、树一个文件夹。后来发现这样分类有很大的问题——一道动态规划的题它可能同时涉及“数组”“记忆化搜索”“状态压缩”我该把它放进哪个文件夹3.1 标签系统的核心逻辑这次刷题周期里我全面转向了标签系统。每道题允许同时打多个标签搜索时按标签组合来过滤。比如我想找“滑动窗口 哈希表”的题目直接搜索这两个标签的交集就行不需要纠结它属于哪个文件夹。建议的标签体系分为两大类数据结构类数组、链表、栈、队列、哈希表、树、二叉堆、并查集、线段树、Trie树、图。算法思想类二分查找、双指针、滑动窗口、贪心、递归、回溯、动态规划、分治、排序、前缀和、位运算、拓扑排序。一套稳妥的经验是标签总数不要超过25个太多了你会花大量时间在“打标签”而不是“复盘”上。每道题选1到3个标签就够了选多了等于没选。3.2 专题刷和随机刷怎么配合21号到22号我自己是这样分配的21号以专题刷为主集中处理某个数据结构相关的题目这样可以快速建立对该数据结构题型的敏感度22号改成混合刷故意把不同标签的题打乱模拟真实竞赛和面试的场景。两种刷法各有优势但笔记都是同一个模板。专题刷适合入门同一个知识点连续刷几道你会很快发现套路。混合刷适合检验如果你能在“不知道今天的题属于哪个类型”的情况下依然准确判断出解法方向那说明笔记里的知识已经在脑子里完成迁移了。顺便提一嘴如果你是在平台上跟着题单刷可以把题单的URI存到笔记里方便后续回刷。但笔记一定不要只依赖平台的收藏夹因为收藏夹不能帮你记录思考过程。4. 从读题到成文的完整实操流程这一章直接说我是怎么操作这两天的包括用了什么工具、每个环节花了多少时间。整个过程我已经重复过很多次这次算是把细节完全固定下来。4.1 工具选型普通但可靠我用的是本地Markdown文件 代码编辑器。文件名格式统一为“20260121-题目名.md”放置在按月份分好的目录下。之所以不选用专门的笔记软件是因为Markdown文件格式开放、不怕以后换工具、方便用脚本批量统计。文件名里一定要带日期。有了日期你就能在几个月后清晰地看到自己每天刷了几道题、笔记密度是多少复盘时大有可为。4.2 做题时的草稿习惯很多人的刷题记录从AC之后才开始写我不一样。我在读题阶段就会在草稿纸上画出关键信息数据范围是多少这决定算法复杂度的上限是否有负数、空集、重复元素这些最容易踩坑样例输入输出之间是怎么对应上的确保读题没有理解偏差这一步大概花3到5分钟但能在后面省下大量反复提交的时间。我在21号下午连续几道题都是因为没看清数据范围先写了一个直观但错误的解法提交超时之后才回头重新审视限制条件。后来改成先画边界再动代码效率明显提升。4.3 AC之后不要急着下一题题提交通过后我要求自己在10分钟之内完成笔记雏形否则直接跳到下一题。这个小规则看起来很机械但非常有效。因为刚AC时你对题目的记忆处于最清晰的状态这时候记录成本是最低的。如果等晚上一口气补笔记你会发现有些思路细节已经丢失写出来的笔记质量明显打了折扣。时间再紧张也要留出这10分钟。宁可少做一道题也不能让一道AC的题目没有任何沉淀。4.4 第二天的批量复盘22号早上我花了一个小时做了一件特别推荐的事把21号写的所有笔记从头到尾快速读一遍不看代码只看思路和复杂度分析。这一遍的目的不是学习新东西而是确认“昨天写的笔记今天还能看懂”。如果哪一篇笔记第二天看已经觉得陌生说明这篇笔记不合格要么思路没写透要么踩坑记录太模糊马上重新补充。4.5 我这两天的实际时间分布这里附一下这次刷题周期的具体时间分配给大家做参考时间段内容笔记产出21日 13:00-15:30专题刷哈希表类4篇完整笔记21日 16:00-18:00专题刷链表类3篇完整笔记21日 20:00-22:00回顾白天笔记 补充变体7篇笔记修订22日 09:00-11:30混合刷中等难度随机5篇完整笔记22日 14:00-16:00卡题攻坚一道动态规划1篇超长笔记22日 20:00-21:30全量复盘 整理标签所有笔记过一遍两天加起来有效刷题时间10小时左右刷了20道题左右写出了13篇完整笔记和7篇修订笔记。听起来数量不多但这20道题每一个我都敢说“一个月后还能讲清楚”这才是我觉得值得的投入产出比。5. 这次复盘发现的三类高频错误附修正策略两天刷下来我在复盘的时候把踩坑记录做了一个小统计发现错误高度集中在三类。如果你也在刷题大概率有过类似困扰。5.1 边界条件循环条件里差一个等号这是出现频率最高的一类。典型场景是二分查找里while (left right)和while (left right)的区别没想清楚导致死循环或漏掉答案。还有数组下标问题写循环的时候没有想清楚区间是左闭右闭还是左闭右开。修正策略在笔记模板的“踩坑记录”里专门把边界条件单独写一行。然后在代码里加一个简单的内部注释例如“这里的 是因为初始区间包含 right 对应的元素”。下次再遇到类似的题直接搜索这个关键词就能看到自己以前踩过什么坑。5.2 读题偏差漏看了数据范围21号晚上有一道题我用了O(n^2)的解法提交直接超时。回头仔细看题才发现数据规模到了10^5显然应该用O(n log n)。这种错误不是算法不会而是读题太粗心。修正策略读题阶段花一分钟专门把数据范围圈出来写在草稿纸上。标准是拿到一道题第一反应先看n有多大再决定用什么复杂度的算法。n10^3 你随便写O(n^2)n10^5 就要考虑O(n log n)n10^6 基本只能上O(n)。把这条规则写成便签贴在笔记软件的第一行每次打开都看到。5.3 套路化类比套模板但不理解适用条件这个错误比前两个更隐蔽。22号下午卡了一道动态规划的题我一开始套了一个看似标准的“网格DP”模板结果样例怎么都过不了。后来细想才发现这道题的状态转移不是一个固定方向的递推而是依赖子区间需要换一种DP状态定义方式。这类问题说明模板只能帮你快速找到方向但不能替你理解题目的独特性。修正策略是在笔记的“变体与扩展”里主动写这样一句话“这道题如果XX条件变了标准模板就不能直接用因为……”。写完这一句你对模板的适用边界理解就会深很多。下面用表格把三类高频错误归类整理错误类型典型现象发生频率修正动作边界条件死循环、漏答案、越界高笔记中单列边界条件代码内注释关键等号读题偏差复杂度选错、看漏条件高读题先圈数据范围再定算法模板误用套了模板但过不了中主动写适用条件标注模板失效边界6. 刷题笔记的长期复用从单题笔记到知识网络如果你只是按照前面的方法每天记录笔记会停留在“一道题对应一个文件”的阶段。这没问题但还不够。大概有几十篇笔记之后你会发现很多题目之间是有隐藏连线的。这时候就可以进入下一个阶段把单题笔记编织成知识网络。6.1 定期回顾的节奏怎么定我的回顾惯例是1天、3天、7天、30天四个节点。1天后快速看一遍笔记里的一话总结确认还记得。3天后不看代码尝试在纸上写核心框架。7天后把这道题对应的变体题拿出来做一遍。30天后只看踩坑记录测试自己是否避开了以前踩过的坑。这个节奏不需要抢占太多额外时间。每天花十分钟只把到期的笔记过一眼即可。但长期坚持下来笔记的复读价值会远远超过写作成本。6.2 给笔记加“关联链接”从22号晚上开始我尝试在笔记的“变体与扩展”字段里加上相关笔记的引用。比如我在某一题的笔记末尾写上“这题的区间合并思路和20260121-第三题的写法相似但那边是开区间这边是闭区间”。下次整理或者复习的时候只需要沿着链接跳转就能在几道题之间来回对比形成一组一组的知识点群。这种做法的价值在于它逼着你在写每一篇笔记的时候都思考“这一题和哪些题目有联系”而不是孤立地看待每一道题。长期积累下来你的知识结构会从一棵棵树变成一张网这张网才是你应对新题时快速检索的依据。6.3 刷题笔记最终给到你的东西两天刷下来我觉得最重要的成果不是那十几篇笔记本身而是一个可复制的习惯做完题之后问自己一遍这道题我能不能用十分钟写清楚它的思路、复杂度、边界条件和变体空间。做不到就说明还没有结束。以我自己实际的体会收尾吧。以前我总觉得刷题快就是效率高这轮实践之后反而觉得真正的高效率是把“会一道”变成“会一类”把“AC一次”变成“以后都能AC”。2026年1月21日到22日这两个晚上坐在屏幕前对着题目和笔记来回打磨的过程比过去半个月盲刷带给我更多确定感。如果你也正被“刷题没效果”这个问题困扰不妨试试这个流程——先别管今天刷几道先保证今天留下了一篇真正写透的笔记。
返回列表