ARTICLE DETAIL

资讯详情

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

刷完LeetCode HOT 100后,我总结的高频题型与刷题方法论

刷完LeetCode HOT 100后,我总结的高频题型与刷题方法论 1. HOT 100 到底值不值得刷我为什么把它完整刷完LeetCode HOT 100这套题单在准备算法面试的人心里几乎等于“权威”。我当初决定把它完整刷完倒不是因为它口碑好而是我发现身边拿到满意 offer 的人不管基础好坏最后都绕不开这套题。断断续续刷了几个月“已完结”这三个字终于打上了今天这篇东西不是题号列表的搬运而是我刷完之后最想留下来的总结。先说结论HOT 100 不是 100 道独立的题它本质上是一张“高频考点地图”。很多人刷不完不是败在智力上而是败在没有搞懂这套题单的底层逻辑——它不是让你从 Easy 到 Hard 线性推进的而是把面试里最容易出现的解题模式打散重组了一遍。数组、链表、二叉树、动态规划、图论、滑动窗口、单调栈……每一类拿出来都是面试官手里的一张牌HOT 100 做的就是把这些牌全部摊到你面前。那它值不值得刷我的答案是非常值得但有前提。如果你还在犹豫“我要不要先把数据结构和算法书看完再做题”那我劝你别等了直接开刷。因为 HOT 100 本身就是一本“习题版的数据结构教材”你在做题过程中自然会遇到需要补的基础知识回头去补效率反而更高。但如果你的目标是“背下这 100 题的答案”那我建议你趁早换思路——面试官不是傻子同一道题换个约束条件、改个输入范围背题的人立刻露馅。我见过不少刷题数量惊人却面试翻车的人也见过只刷了 200 题却拿下大厂 offer 的人。差距就在一个地方你是在积累解题模式还是在积累提交记录。HOT 100 能帮你做的是把高频模式集中到你面前让你用尽量短的时间建立“看到题目特征→想到对应解法”的条件反射。这套反射一旦建立后面再遇到新题你至少有方向不会两眼一抹黑。说个我自己刷完后的直观感受做前 30 题的时候每道题都觉得新鲜解法也百花齐放做到 60 题左右开始频繁出现“这题我好像在哪见过”的既视感等到最后 40 题刷完最明显的变化不是“简单题秒掉”而是拿到一道中等题时我能在大约一两分钟内判断出它属于哪类问题、大概用什么套路。这个能力说实话比多会几道冷门题有用得多。2. 按专题拆解HOT 100 里最常见的高频题型与做题模板很多人拿到 HOT 100 之后做的第一件事就是从第一题开始顺着刷。我劝你别这样。这套题单虽然叫“100题”但它内部有明显的专题聚拢效应。我把它们拆成六个大块每一块都有自己强烈的“性格特征”和解题模板。你按块去吃比按序号去啃效率高得多。先放一张我刷完后的分类记忆表——不是严格统计但大致能反映 HOT 100 的题型骨架题型类别代表性题目印象核心考点面试出现频率数组与哈希表两数之和、字母异位词分组、最长连续序列哈希优化、空间换时间极高链表反转链表、环形链表、LRU缓存虚拟头节点、快慢指针、递归迭代极高二叉树中序遍历、最大深度、最近公共祖先递归思维、层序框架极高动态规划爬楼梯、打家劫舍、零钱兑换、编辑距离状态定义、转移方程高双指针/滑动窗口无重复字符的最长子串、盛最多水的容器窗口伸缩、边界维护高图论与搜索岛屿数量、腐烂的橘子、课程表DFS染色、BFS分层、拓扑排序中高栈与单调栈有效的括号、每日温度栈的匹配、单调性维护中高这张表不是让你背而是让你心里有个谱——HOT 100 不是均匀分布的它明显偏向面试里最容易出题的方向。2.1 哈希表与数组HOT 100 的“开场菜”这一块是最先该拿下的也是最容易建立信心的。代表题就是“两数之和”这题简单到几乎人人都会但它背后的思维转变极其重要从暴力枚举到哈希查找。暴力解是两层循环O(n²) 复杂度面试官听了眉头一皱哈希解是一次遍历每到一个数就去哈希表里找“另一半”找到了就直接返回找不到就把自己和下标存进表里。这个 O(n²) 到 O(n) 的转变是 HOT 100 整张题单里最经典的“空间换时间”案例。后面很多题比如“字母异位词分组”“最长连续序列”本质上都是哈希表在打底。我的建议是这一块不要贪快每道题都强迫自己先想清楚“如果不用哈希表暴力解长什么样用了哈希表到底省在哪一步”。把这个问题想明白了数组哈希类的题你就毕业了。2.2 链表题虚拟头节点和快慢指针是万能钥匙链表题在 HOT 100 里比例不高但几乎是面试必考。原因很简单链表题代码量少、边界条件多、特别能考察一个人的细线条能力。你写崩一个空指针面试官立刻就知道你对指针/引用的理解还不到位。链表题的核心套路就两个虚拟头节点和快慢指针。虚拟头节点解决的是“头节点可能被删”的麻烦有了它你就不用为 head 单独写分支判断快慢指针解决的是“找中点”“判断环”“找倒数第 k 个”这三类经典问题。比如“反转链表”迭代解法里第一步就是先保住 next 节点否则你反转了当前节点的指针后半个链表直接就丢了。这个思想在很多题里都会复现修改指针之前先想清楚它原来的下一个节点谁帮你保存。“LRU缓存”是链表题里的另类它是哈希表双向链表的组合设计题难度不小但一旦自己推导过 put 和 get 的完整流程你对这两种数据结构的理解会上一个台阶。这题面试出现的频率极高强烈建议手写至少三遍。2.3 二叉树递归套路是 HOT 100 的核心技能二叉树类题目是 HOT 100 里最容易“刷出感觉”的一类因为它的解法高度模式化。前序、中序、后序遍历可以用一套递归框架通吃层序遍历则用队列BFS 按层弹节点。很多看起来很高端的题比如“二叉树的最大深度”“验证二叉搜索树”“最近公共祖先”底子都是递归。这里我必须说一个很关键的认知二叉树题考的不是你会不会递归而是你递归函数定义想得清不清楚。举个例子“最大深度”这题如果定义“某节点的深度 1 max(左子树深度, 右子树深度)”那代码就是三行的事如果你纠结“递归到底是怎么一层层返回的”那你每次做题都会卡住。面试的时候先说清楚你的递归函数返回什么、终止条件是什么再写代码哪怕代码有细节瑕疵面试官也会觉得你思路清晰。另一个容易漏掉的是“层序遍历”的按层存储问题。比如让你输出一个二维数组每层一个子数组你需要在 BFS 的每一轮开始前先记录当前队列的 size这个 size 就是当前层的节点数只弹 size 个节点就是完整的一层。这个技巧在“二叉树的右视图”“二叉树锯齿形遍历”等变形题里反复出现属于必背框架。2.4 动态规划状态定义比转移方程更重要动态规划是 HOT 100 里最需要“开窍”的板块也是很多人刷题路上的分水岭。但说句实在话HOT 100 里的 DP 题其实不难它选的几乎都是“状态定义一旦想清楚代码就非常简单”的经典题。比如“爬楼梯”dp[i] 表示爬到第 i 阶有几种方法转移方程就是 dp[i] dp[i-1] dp[i-2]。再比如“打家劫舍”dp[i] 表示偷到第 i 家时的最大金额关键在于“偷不偷第 i 家”这个决策。这两道题是理解 DP 的最佳入门题因为它们让你直观感受到所谓转移方程就是“当前状态怎么由前面已有的状态推出来”。真正容易翻车的是“编辑距离”这类二维 DP。遇到这种题我的经验是不要先想着写代码先画一张表格把字符串的每一位作为行列手动推一遍整个表你会突然理解 dp[i][j] 到底代表什么。二维 DP 的核心就一句话把大问题拆成两个前缀的子问题。这个思维一旦建立零钱兑换、最长递增子序列这些题目就只是换了层皮。我个人还会把 DP 题和回溯区分一下DP 是求“最值”或“方案数”回溯是“枚举所有方案”。HOT 100 里这两个都有如果你能分清楚什么题该用哪种你的算法判断力已经超过一半的刷题人。2.5 双指针、滑动窗口与单调栈代码量小但很容易翻车这类题在 HOT 100 里数量不算最多但几乎每一道都是面试官的心头好因为它们看起来简单、实际很容易写错边界条件。“无重复字符的最长子串”是滑动窗口的经典题。标准的写法是右指针一直往前走左指针根据条件收缩。写的时候最容易错的是什么时候收缩左指针答案是当窗口内出现重复字符时把左指针跳到重复字符上一次出现位置的下一个位置。你把这套逻辑理清了滑动窗口类的题基本就能触类旁通。“盛最多水的容器”是双指针的代表。很多人第一次见到这题会想用单调栈结果越绕越晕。实际上这题最优解就是两个指针从头尾往中间走每次移动高度较矮的那一侧因为只有移动矮的一侧面积才有可能变大。这个反直觉的结论恰恰是双指针题的精髓通过排除不可能成为最优解的情况缩小搜索范围。“每日温度”是单调栈的入门代表。核心是维护一个单调递减的栈遍历温度时只要当前温度比栈顶温度高就说明栈顶那天的“下一个更高温度”出现了。这个模板在“下一个更大元素”“接雨水”等题目里都能复用非常值得专门抽时间总结成自己的模板。2.6 图论与搜索一面中的“分水岭”图论题在 HOT 100 里的占比不大但它往往是拉开差距的关键。因为前面那些题型大家都能刷到但图论的题如果你没系统练过面试现场真的很难临场发挥。“岛屿数量”是 DFS 染色的入门题。套路是遍历整个网格遇到一个岛屿值为1就把答案加一然后用 DFS 把和它相连的所有 1 全部改成 0防止重复计数。这种“探索一片连通区域”的思路在“被围绕的区域”“腐烂的橘子”等题里都能复用。“腐烂的橘子”是 BFS 按层扩散的典型题。你需要先把所有腐烂的橘子入队然后一层一层往外传染每传染一层时间加一直到没有新鲜橘子为止。这道题练的是你对 BFS 分层处理的理解和二叉树层序遍历用的其实是同一个框架。“课程表”则是拓扑排序的代表题。它的本质是“判断有向图是否存在环”解法是不断找入度为 0 的节点把它去掉更新邻居的入度如果最后处理不完所有节点说明有环。这类题在面试里出现的频率越来越高因为它能同时考察图论基础和贪心思维。3. 我的刷题顺序与时间分配避开“刷了就忘”的坑很多人刷题最大的困惑不是“不会做”而是“做了就忘”。上个月费劲搞懂的题这个月看到又像新题一样。这个问题的根源几乎都出在刷题顺序和时间分配上。HOT 100 刚好适合用来建立一个科学的上手节奏因为它难度曲线不是线性的完全可以根据题型难度搭建自己的学习路径。我的建议是按下面这个顺序开刷数组与哈希表约 15 天建立“空间换时间”的基本意识熟悉哈希表的使用细节。链表约 10 天把虚拟头节点和快慢指针两个大杀器练熟。二叉树约 12 天彻底搞懂递归函数的定义和层序框架。双指针与滑动窗口约 10 天练边界控制能力说白了就是细心。动态规划约 20 天从简单的一维 DP 开始逐步过渡到二维。栈与单调栈约 7 天模板不多练到肌肉记忆。图论与搜索约 15 天先 DFS、再 BFS、最后拓扑排序。其他题目约 10 天包括堆、位运算、贪心等剩余题型。整体下来差不多 3 个月左右这是按每天投入 1.5 到 2 小时估算的。我自己实际用时差不多也是这个数。有几个细节我觉得特别值得说一下第一不要在一个专题里卡太久。我见过有人死磕动态规划想着一口气全吃透结果两周过去连最简单的状态转移还没理清。正确做法是如果一道题超过 25 分钟还没有任何思路直接看题解看完题解自己闭卷重写一遍。你不需要每道题都“原创出来”你需要的是“见多识广”和“能复现出来”。第二每天的新题老题比例要控制住。我最开始刷的时候每天 5 道新题一周后回头看前面的全忘光了。后来改成“3 道新题 2 道旧题重写”第二天再复习一遍前一天的新题记忆效率明显改善。刷题最忌讳的就是只往前冲、不回头看。第三建立自己的“题目档案”。我不太建议直接抄网上的题解笔记因为那是别人的思维链路不是你的。更好的做法是每道题 AC通过之后用自己的话写一段“这道题我为什么这么解”不用写长两三句话就行。比如“这题是求子串最长不重复看到子串最长关键词想到滑动窗口右指针扩张、左指针遇重复收缩”。这个写“思路标签”的动作是逼你从“会做”走向“会讲”的关键一步。我还建议你注意一个容易被忽略的点简单题和中等题的比例。有段时间我沉迷刷 Easy 找成就感结果面试一做中等题就露馅。现在我更推荐的比例是一道简单题热身、两到三道中等题主攻、偶尔一道 Hard 挑战。HOT 100 里 Hard 的占比并不高但每一道 Hard 都值得精刷三遍因为它们的解题思路往往能覆盖多个专题。4. 从刷题到面试怎样把 HOT 100 变成面试的底气刷题和面试很多人以为是一回事其实差距很大。你在家里安静地写题和你在面试房间里一边写一边讲思路是完全不同的两个场景。HOT 100 刷完之后你会进入一个微妙的状态很多题你都见过但面试官问你的方式可能和你刷题时遇到的不完全一样。这时候决定你成败的就不再是“会不会做”而是“能不能在现场把自己会的东西清楚地表达出来”。我总结了四个从刷题到面试的关键转变照着练你的面试表现会提升一截转变一拿到题先看数据范围再想算法。很多人刷题时习惯直接写忽略了输入范围的提示意义。比如题目告诉你 n 最大是 10^5那你 O(n²) 的算法大概率会超时趁早换个思路如果 n 只有 100那暴力枚举可能反而比哈希表更容易写对。面试时你先说一句“这道题 n 的范围是 10^5所以我打算用 O(n) 的解法”面试官第一时间就会给你加分。转变二先说思路再写代码。我在面试里最怕遇到那种一声不吭就开始写的人写半天发现方向错了整张纸都废了。正确姿势是拿到题花一两分钟思考然后告诉面试官“我的思路是先把数组排序然后用双指针从两头往中间找时间复杂度 O(n log n)空间复杂度 O(1)”。你先说清楚面试官不仅能帮你在早期纠正方向还会觉得你思维严谨。转变三HOT 100 里的变形题要多加提防。举个具体例子“两数之和”你刷过但面试官可能改成“给一个有序数组返回所有两数和等于 target 的不重复组合”——这其实就是“三数之和”的降级版双指针直接干哈希表反而不好去重。再比如“无重复字符的最长子串”可以变形为“最多含有两个不同字符的最长子串”框架不变变的只是收缩条件。所以刷题的时候每做完一道题都强迫自己想一想如果改一个条件这题会变成什么提前做过这个联想面试场上遇到变形题才不会慌。转变四面试中先给可行解再聊优化。很多人有个毛病一上来就想最优解结果憋了半天没写出来。实际上面试官更想看到你“能写出正确的解然后逐步优化”的过程。你先给一个暴力解明确说“这个解法的复杂度是 O(n²)”然后再提“可以用哈希表优化到 O(n)”这本身就是一道题完整的解答路径。我甚至觉得这种“先可行、再优化”的表达方式比直接甩一个最优解更能拿高分因为它展示的是你的思考过程而不是记忆结果。还有一个细节面试写代码时变量命名要讲人话。我在刷题时经常用 i、j、k 这类短变量因为自己看得懂、写得快。但面试官是要在旁边看着你写的如果你把变量命名为 leftIndex、rightIndex、windowMap别人一眼就能看懂你的逻辑。这是很小的事但很多刷题出身的人根本注意不到。HOT 100 刷完之后我还建议你做一次“面试模拟”从题单里随机抽几道题不看题解、不看代码直接在白纸上手写写完再口头复述一遍你的解题思路。这个动作看起来简单但它能把“刷过”转化为“能讲清楚”而后者才是面试真正考察的能力。5. 复盘方法让每一道题都“刷透”而不是“刷过”我见过太多人陷入“题海战术”的幻觉刷了 300 道觉得很有安全感结果面试官换了个问法就卡壳。这种现象的本质其实是把“刷过”当成了“掌握”。在我的定义里一道题真正算“刷透”必须满足三个标准第一能闭卷写出完整解法第二能说清楚为什么这么做第三能回答“这个解法哪里可以优化”。如果你对一道题只是“看过题解觉得有道理”那它离“刷透”还差得很远。我的复盘方法总结下来就是“三遍法”和“两道工序”。“三遍法”说的是每一道有价值的题至少刷三遍第一遍独立尝试 25 分钟左右如果 AC 了最好如果没思路看题解理解后闭卷重写。这一遍的目标是“会做”。第二遍隔 1 到 2 天凭记忆重写一遍要求写完后口头解释一遍思路。这一遍的目标是“不忘”。第三遍隔 1 到 2 周重新做这道题同时尝试至少一种不同的解法比如上次用递归这次试试迭代。这一遍的目标是“灵活”。“两道工序”指的是每道题复盘时做两件事。第一道工序是写错题原因。不是简单写“超时”或“空指针”而是要具体到原因比如“我忘记在移动左指针时更新窗口内字符频次了”“我忽略了链表的头节点可能被删除没加虚拟头节点”。这些具体原因收集得越多你对自己的薄弱环节就越清楚。第二道工序是给题目贴标签。比如“哈希表 一次遍历”“单调栈 栈内存下标”“BFS 分层输出”。贴上标签之后你实际上是在建立自己的“题感索引”以后遇到新题第一反应就是从这些标签里匹配最近似的模式。这一步是我个人认为整篇刷题过程里最有价值的一个动作。我还想分享一个比较反直觉的体会复盘别人的高质量题解也是刷题的一部分。HOT 100 的题目在网上都有非常优秀的题解每一道题都值得你对比自己的解法与最优解法的差距。有一次我刷“接雨水”自己用单调栈写出来了觉得挺得意后来看到双指针解法左右指针维护左右最大高度当场头皮发麻——原来这题存在更优雅、常数更小的解。从那以后我每道题 AC 完都会去看看评论区有没有更妙的解法这习惯让我受益很大。最后说点心态层面的东西。刷题这件事很容易让人焦虑因为你永远能刷到比你强的人。但我刷完 HOT 100 之后最大的感受反而不是“我变强了”而是“我知道面试题大概长什么样了”。这份“确定性”比多刷一百道新题更能缓解我的面试焦虑。当你把 HOT 100 里的高频模式真正吃透之后你会发现新题其实也不再“新”——它只是旧模板换了件外套而已。我到现在还保留着一个习惯每次面试前不去翻大而全的知识点而是只看我自己的错题记录和题目标签。这个“浓缩档案”是 HOT 100 留给我的最大财富也建议你从今天开始就为这个档案积累素材。
返回列表