资讯详情

LeetCode面试经典150题刷题全记录:专题拆解与避坑指南

📅 2026/10/20 20:15:43 | 华诺云谱 👁 阅读
LeetCode面试经典150题刷题全记录:专题拆解与避坑指南
刷到第97天终于可以聊一聊LeetCode面试经典150这套题单了。先说结论这150题不是简单地把高频题凑在一起它是一套按专题组织、覆盖面试核心考点的训练路径。如果你现在还在“刷了忘、忘了刷”的循环里或者不确定题库里几百上千道题到底该从哪下手这套题单值得作为主线认真过一遍。这篇文章是我做到Day97的阶段性记录包含刷题规划、专题拆解、几道值得反复琢磨的中等题以及这期间踩过的典型坑和对应排查思路。无论你刚启动这套题单还是已经刷到一半想调整打法应该都能找到一点可参考的东西。1. 刷题计划与整体设计思路1.1 为什么选“面试经典150”而不是盲目刷全题库很多人一上来就打开题库按“题目列表”从上往下刷或者只挑难度为“简单”的题找信心。这两种方式我都试过效果都不算好。题库全量刷的问题在于题目数量多、重复题型多很多题在解法上是同一个模型的变体单纯增加数量对面试帮助有限。只刷简单题的问题更明显——简单题通常只覆盖单一知识点而面试现场更常出现数据结构组合、多个技巧叠加的中等题。面试经典150这套题单的好处是它本身按主题分好了类比如数组/字符串、双指针、滑动窗口、矩阵、哈希表、区间、栈、链表、二叉树、图的深度优先和广度优先、拓扑排序、二分查找、堆、回溯、分治、 Kadane 算法、动态规划、多维动态规划、位运算、数学、字典树等。它选的题目很多是各专题里的经典代表难度分布也贴近真实面试场景简单题打底、中等题是重头、少数难题作为区分度。拿我自己来说做到Day97相当于把150题完整刷完一遍之后开始滚动复盘。中间经历了很多反复过完一遍再回头有些题还是写不利索。这很正常关键是按专题吃透而不是追求“做的遍数多”。1.2 每日节奏与时间分配刷题这件事最难的不是某道题不会而是持续。我前21天定了一个很笨但有效的规矩每天至少一道题只多不少但也不贪多。到了中间阶段会偶尔有精力旺盛的时候一天做三四道但绝大多数时间稳定在每天1到2题。这样做的理由很简单——如果某天任务定得太重一旦加班或者有突发事情心里会产生“今天完不成算了”的念头连续断几天就彻底停下来了。Day1到Day30我按数组、哈希表、双指针这些最基础的板块走每天雷打不动做题打卡Day31到Day60进入二叉树、链表、回溯、二分这些明显需要建模能力的专题Day61到Day90集中处理动态规划、多维动态规划、贪心、图、拓扑排序这类综合性强、容易卡壳的题目Day90之后就是二刷、三刷错题配合周末做模拟白板写代码。时间分配可以参考这样一个框架工作日晚上固定45到60分钟先花10到15分钟回想之前题目的核心思路再动手写新题。哪怕没完全做出来也会把题解看明白并自己实现一遍不求快求“下次见到能反应过来”。休息日每天安排两个时段上午2小时左右集中攻克一个专题里卡住的题目下午1小时左右做错题复盘。这个节奏不激进但能保证每天都和代码保持接触。刷题最关键的不是单日强度而是连续性。1.3 专题顺序为什么先易后难面试经典150的目录并不是简单到难线性排列它按专题罗列但专题之间有依赖关系。先刷数组、哈希表、双指针、滑动窗口是为了建立“暴力解到优化解”的对比感觉。比如最经典的两数之和很多人第一反应是双层循环但学了哈希表之后就会意识到很多数组问题本质是“用空间换时间”把查找从线性降为常数级。等前面的基础数据结构用熟了再进链表和二叉树就会顺很多。链表和二叉树专门训练“指针操作”和“递归思维”这两块如果没打好底后面回溯、DFS/BFS、动态规划都会受影响。递归这个坎早晚要过不如早一点在二叉树上把它想明白。回溯本质上是递归加状态回退动态规划的表态转移本质上也依赖递归状态的定义能力。所以专题顺序不是随便排的它是一层层搭起来的。1.4 记录、打卡与错题本的建立Day97能坚持下来很大程度上靠记录。我用的方式很简单电子表格列几个字段——日期、题目编号、题名、专题、难度、我的解法类型暴力/优化/看题解、掌握程度三轮-完全独立、二轮-看提示后可写、一轮-需要认真重新学、备注。每天做完题以后更新一行。这种做法虽然花不了几分钟但到后期价值极大因为你可以清楚地看到自己哪些专题是强的、哪些专题是虚弱的复盘优先级一目了然。错题本不需要摘抄整个题解需要记录三样东西卡壳原因是没思路、没模板、还是边界问题关键突破口是什么下次重做时第一眼该看哪一步。比如二叉树的题很多卡壳都发生在“递归边界条件”上这类记录比长篇题解更实用。2. 高频数据结构与题型拆解2.1 数组、双指针与滑动窗口的底层逻辑面试经典150里数组/字符串、双指针、滑动窗口排在最前这个设计是有道理的。因为这三类题是所有后续专题的基础。数组题经常考察原地操作、元素移动、区间合并这类问题核心是让代码在空间上尽量省、时间上尽量快。双指针的价值则在于把两重循环优化成一重循环。典型的场景包括有序数组的两数之和、反转字符串、移除元素、最多水的容器。滑动窗口可以看作双指针的一个变种通常用来处理子数组、子串问题。它的核心套路是先用右指针扩张窗口直到窗口不满足条件再移动左指针收缩窗口在过程中更新最优结果。理解这个套路以后像无重复字符的最长子串、长度最小的子数组这类题就有统一的解法框架。有一个容易忽略的细节滑动窗口题目里窗口收缩条件必须对应清楚是“当前字符重复了”还是“窗口内数字的和大于等于目标”这个条件写错了整个代码会跑偏。实战里很多人的毛病是一看是数组题就总想排序或者嵌套循环。但很多最优解恰恰不需要全局排序只需要利用顺序扫描和局部状态维护。比如“除自身以外数组的乘积”这道题最优解思路是维护左前缀乘积和右前缀乘积本质上就是用两个方向的前缀信息替代额外数组如果你能琢磨到这个层面数组题的理解就到位了。2.2 链表指针操作与递归边界链表专题的题不多但是每道都很经典。环形链表、合并两个有序链表、反转链表、删除链表倒数第N个节点、链表排序等这些都要求对指针指向有非常清晰的感觉。链表题最大的考验不是算法思路而是操作的顺序。反转链表需要先把下一个节点存下来再改当前节点的 next 指针否则指针一断就丢了后续节点。很多人在白板上写这些题最容易犯的错就是改变了 next 之后才发现原来指向的下一个节点找不到了。链表的递归写法往往很简洁但理解起来比迭代稍微绕一点。像反转链表递归版本可以写成先反转 head 后面的部分然后把 head 接到新链表的尾部。这类题适合死记模板吗不太建议建议你多画图。自己画一个三节点的链表手动模拟一次递归的展开和回溯比盯着代码看十遍有效得多。我自己的体会是链表题还要注意 dummy 节点的使用。凡是涉及头节点可能被修改的题目比如删除节点、合并链表、反转提前建一个虚拟头节点可以省去大量边界判断。这一点尤其适合面试时快速写代码不容易遗漏边界。2.3 二叉树与递归思维二叉树是面试经典150里分量很重的一块。前序、中序、后序、层序遍历最大深度最近公共祖先二叉树的序列化与反序列化这些是面试高频题。二叉树的核心思维是递归。你需要做到一件事拿到一棵树先想清楚“当前节点要做什么”剩下的交给递归。很多人的困难在于试图在脑内模拟整个递归的过程其实不需要。递归只需要关注三个问题返回值是什么、当前层逻辑是什么、终止条件是什么。把这三个定义清楚递归函数自然就正确了。拿二叉树的最大深度来说返回值是当前子树的高度当前层逻辑是 max(左子树高度, 右子树高度) 1终止条件是空节点返回 0。就这么简单。真正容易出错的地方反而是迭代法的层序遍历里队列的使用比如需要区分每一层节点数还是全局BFS。另外二叉搜索树自成一个小专题。中序遍历有序这个特性可以用来验证BST、寻找第K小的元素。当你写利用BST特性的递归时要时刻记得只需要和当前节点的值比较决定往左走还是往右走不要试图一次性判断整棵树的有序性。2.4 回溯、动态规划与图综合能力的试炼场回溯是很多人的分水岭。N皇后、组合总和、全排列、子集、括号生成这些都是经典题。回溯的基本模板就三步选择、递归、撤销选择。以全排列为例使用一个 visited 数组标记已经用过的元素没有用过就加入路径递归进入下一层退出时移除这个元素。只要掌握了这个模板大部分排列组合类题都能套。难点在于剪枝比如组合总和题里的去重需要先排序并在循环里跳过相同元素。动态规划是这套题单里另一个大专题。爬楼梯、打家劫舍、最长递增子序列、最长公共子序列、编辑距离这些题一旦理解透了能形成一个通用的思维框架定义 dp 数组找状态转移方程确定初始化条件和遍历顺序。很多人卡在“为什么想不出状态转移方程”上。我的经验是先不要想优化先搞一个朴素的递归再把它改为带 memo 的递归最后改成 dp 数组。这个“暴力递归到记忆化递归再到动态规划”的路径几乎可以覆盖大部分动态规划入门题。比如打家劫舍先想到 f(i) 表示偷到第 i 家时的最大金额然后 f(i) max(f(i-1), f(i-2) nums[i])这就是全部核心。别看这个公式简单推导清楚以后编辑距离那种复杂转移也才有基础。图相关的题目在面试经典150里主要涉及岛屿数量、腐烂的橘子、课程表拓扑排序、单词阶梯等。DFS、BFS两种遍历方式必须熟悉。网格题有一个非常通用的技巧方向数组 标记已访问把四联通或八联通的遍历写清楚。拓扑排序题则要用到入度数组和队列BFS不断取出入度为0的节点剥洋葱一样修完所有依赖关系。这一部分不需要盲目追求难题。能稳写中等题就算达标难题用来开阔思路不必有心理压力。3. 典型实战几道值得反复做的中等题3.1 长度最小的子数组滑动窗口的“教科书题”这道题要求找出数组中满足其和大于等于 target 的长度最小的连续子数组。暴力解法是双重循环复杂度 O(n^2)。滑动窗口可以做到 O(n)。核心流程用两个指针 left 和 right初始都指向 0。right 不断右移把 nums[right] 累加到 sum。当 sum target 时记录当前窗口长度并移动 leftsum 减去 nums[left]继续判断。循环直到 right 到结尾。代码层面要特别注意 while 收缩时机只要 sum target就要收缩而不是 if。因为收缩一个元素之后 sum 可能仍然达标应该继续收缩到不达标为止。这个细节不注意会出现漏解。这道题我首刷时犯了两个错第一是窗口起始 len 初始化成了 nums.length忘记考虑不存在合法子数组时应该返回 0第二是收缩窗口用的是 if导致结果偏大。所以这类滑动窗口题最好自己考察三种情况全数组都不达标、刚好整个数组达标、存在多个符合条件窗口。3.2 二叉树中序遍历迭代法模拟系统栈的经典中序遍历的递归很简单但迭代法往往在面试里成为考察点因为它要求你理解栈帧的恢复过程。思路是一路往左走把所有左子节点压栈没有左子节点了弹出栈顶访问然后转向右子树继续同样的流程。代码骨架def inorderTraversal(root): res [] stack [] cur root while cur or stack: while cur: stack.append(cur) cur cur.left cur stack.pop() res.append(cur.val) cur cur.right return res注意外层 while 条件是 cur or stack不是 cur and stack。当 stack 里面还有节点但 cur 已经为空时。循环还需要继续因为下一步会从栈里弹出节点。这个条件我第一次写的时候就错了。另外这里 stack 存的是节点对象而不是节点的值因为后续需要访问节点的 right 指针。理解这一点迭代遍历就不会死记硬背。这一题掌握得好N叉树遍历、二叉搜索树迭代器这些变体题会轻松很多。3.3 编辑距离动态规划的状态转移现场编辑距离这道题属于中等题里偏硬的一种。题目要求计算把 word1 变成 word2 的最少操作数操作包括插入、删除、替换。定义 dp[i][j] 表示 word1 的前 i 个字符变成 word2 的前 j 个字符需要的最少操作数。初始化的时候dp[i][0] i因为从 i 个字符变成空字符串只能全删dp[0][j] j因为从空字符串变成 j 个字符只能全插入。然后分两种情况如果 word1[i-1] word2[j-1]那么 dp[i][j] dp[i-1][j-1]当前字符不用操作。否则dp[i][j] min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) 1分别对应删除、插入、替换。这道题如果第一次接触很容易在状态定义上摇摆。我的建议是先把表格画出来手动填一遍。3行3列就够填完这个表格状态转移就顺了。真到了面试现场手写这道题时要注意 dp 是二维数组初始化时别把 dp[0][0] 漏掉。题后可以想一想空间优化每次只依赖上一行所以可以用一维滚动数组把空间从 O(m*n) 降到 O(n)这是一个很好的加分点。3.4 岛屿数量网格题DFS的通用写法这道题属于图遍历的基础题。给定一个二维网格1 表示陆地0 表示水统计岛屿数量。思路很简单每遇到一个未访问过的陆地就把它所属的整个连通块都标记为已访问总数加一。DFS 版核心代码def numIslands(grid): if not grid: return 0 rows, cols len(grid), len(grid[0]) count 0 for i in range(rows): for j in range(cols): if grid[i][j] 1: count 1 dfs(grid, i, j) return count def dfs(grid, i, j): if i 0 or i len(grid) or j 0 or j len(grid[0]) or grid[i][j] ! 1: return grid[i][j] 0 # 标记为访问过 dfs(grid, i-1, j) dfs(grid, i1, j) dfs(grid, i, j-1) dfs(grid, i, j1)一个容易出错的地方是标记访问的时机进入 dfs 后第一时间把当前格子由 1 改为 0而不是在递归后处理其他格子时再做。如果不及时标记会出现递归循环导致栈溢出。在真实面试里中间件或者电话面时由于紧张很容易漏掉这个标记动作一定要形成条件反射。另外要注意题目给的是字符 1 还是数字 1这是真实发生过的低级错误检查类型可以节省大量调试时间。4. 常见问题与排查技巧实录4.1 思路会代码不会理解到输出之间的巨大鸿沟刷题到中期最常见的状态是看到题有思路但落到代码上不知道怎么写。这种情况通常不是因为不懂算法而是对语言API不熟或者对某个数据结构的操作不够熟练。比如在 Java 里不想用 List 转数组但题目要求返回 int[]需要知道怎么写 stream 转换或者提前 new int[size] 再逐个填充。这类问题其实可以通过统一常用模板解决比如固定记住数组转 List、List 转数组、排序的写法。每次写题之前先确认自己这方面的基础是稳的否则很容易被非算法问题打断思路。另外“有思路但代码不会”也可能是关键逻辑没有拆到足够细。比如动态规划题如果只是心里知道“应该用 dp”但没明确 dp 数组下标含义没列出转移方程就直接开始写那大概率写到一半就卡住了。建议养成先写注释再写代码的习惯。在编辑器里按照“状态定义、转移方程、初始化、遍历顺序”四行注释把思路固定下来再填充代码成功率会提高很多。这个习惯练好了面试时也受益。4.2 超时的隐性原因不是复杂度分析错了是常数太大有些题同一个复杂度别人跑得完你超时。问题不一定在算法思想而在常数。比如 Java 里用 String 的 来做字符串拼接在循环里频繁拼接会不断创建新对象复杂度没变但实际耗时增加很多这时候应该用 StringBuilder。再比如使用 HashMap 和数组虽然查找都是常数级但 HashMap 的哈希计算和扩容开销更大。当元素范围很小且固定时比如英文字母或数字范围直接使用 int[] 计数往往比 HashMap 更快也更省空间。我Debug的时候遇到一次困扰很久的超时后来发现是重复调用了排序函数。由于某个排序操作本可以放到循环外但被不小心写进了循环里导致每次都多了一个排序的复杂度。复查代码时先看循环里有没有可以提拉出去的操作这种问题容易肉眼忽略但时间影响明显。建议在做完题之后回读一遍循环代码保持“循环越小越好”的习惯。4.3 边界条件遗漏最经典的扣分点边界条件是面试里最容易扣分的地方。常见的有几类空输入、只有一个元素、两个元素、目标不存在、数值为负数、数组上限。面试的时候写完代码之后主动说一句“我检查一下边界条件”特别是检查三个地方指针是不是可能越界、递归会不会无限、结果是不是可能溢出。以二分查找为例mid (left right) // 2 潜在风险是 left right 可能溢出更稳的写法是 left (right - left) // 2。这类细节很难通过“想”发现但真正遇到一次就记住了。另外一个例子是数组类题目经常要求返回下标还是返回值答题前必须和面试官确认避免做完了发现答非所问。4.4 不会的题硬耗时间管理出了问题刷题时最难克制的是“死磕”。前期我经常在难题上耗两三个小时结果只是逼自己看了题解效率反而低。后来我定了个规则一道题如果在30-45分钟里没有实质进展比如连暴力解都写不出来直接看题解然后自己独立重写一遍。这个规则帮我从心理上卸下负担——不追求每道题都在无提示下完成而是追求看到题以后能联想到解法框架。看题解不是抄接触一个新思路以后你需要干一件事用自己的话总结这道题的“闪光点”是什么。是状态定义巧妙还是使用了一个不常见的数据结构还是排序以后简化了问题。把这个“闪光点”写进错题本里下次遇到同类题能主动联想到。相比硬耗这是收益更高的方式。4.5 面试经典150里的跨越从会做题到会讲题刷到Day97之后我明显感觉到另一个层面的变化不只是代码写得出而是“讲得出”。比如面试官问一道题你不仅要给他一个能跑的代码还要说清楚为什么这样做、复杂度是多少、有没有可能更优。这个过程需要刻意练习。现在有些刷题网站提供虚拟面试场景在线出题并模拟面试官提问这种模式很适合在复习后期使用。还有一个偏门但有效的方法把你的解法用录音录下来讲给自己听或者对着一个空椅子讲这能暴露出很多思维盲点。很多人的代码写得对但讲出来逻辑混乱缺失了“为什么这个边界条件是这样”的说明反而给面试官留下了不够扎实的印象。在Day97这个节点上我建议把重心从“刷新题”慢慢调整到“带约束地输出”。比如限制自己在20分钟内完成一道中等难度题然后用5分钟口头讲解。这种练习比单纯追求刷题数量更有价值。面试筛选的从来不是谁做得快而是谁能把思路讲得让人信服。5. 复盘方法与动力维持5.1 滚动复习间隔设计做过的题如果不复习一周以后基本忘掉三成一个月以后忘掉大半。遗忘本身不可怕可怕的是你要在面试前临时再翻一遍所有题。所以从Day60开始我就设计了一个非常轻的滚动复习机制每天做新题之前从错题本里随机抽3道旧题每一道只需要口述思路不需要完整写代码。如果3道里有任何一道说不清当天就把这道题加进待重做列表周末统一重写一遍。这个方法对记忆保持非常有帮助因为它强制你反复从记忆里提取信息而提取这个动作本身就是在强化记忆。周末的复盘不是把一周的题都重写一遍那太消耗精力。我的做法是只重做“掌握程度为二轮及以下”的题。简单题即使忘了看一眼题解很快能想起来但中等题里的动态规划转移方程、回溯剪枝条件一旦忘记重建成本高得多所以优先巩固这些。5.2 从错题本到算法模板库到了后期你会从很多题里看出共性模板。比如二分查找有标准模板滑动窗口有标准模板回溯有标准模板拓扑排序有标准模板。可以把这些模板整理成一个文档每道题对应的代码只是模板上的一个实例。这样做有什么好处呢当面试现场看到一道新题你可以快速判断它属于哪个模板再按模板填逻辑。这比记住上百道题的零散解法高效得多。建立一个“模板触发清单”很有用看到有序数组找目标想到二分看到子串、子数组的最值想到滑动窗口看到全排列、组合、棋盘类问题想到回溯看到求最短路径想到BFS看到依赖关系合法性想到拓扑排序。触发条件越具体做题越快。这个清单要自己总结别人的模板始终是别人的亲手整理过以后才算真正吸收。5.3 心态调整刷题进入平台期怎么办刷题状态并不是一路上升的更像台阶式平稳一段时间某一天突然开窍能力上一个台阶然后再进入下一个平台期。平台期最典型的症状是“感觉什么题都见过但又不是全都会做”或者“错题本越来越多怀疑自己是不是白刷了”。我曾经在Day70左右陷入这种情绪那段时间连续一周每天新题都没能独立做出来全都要看提示。后来和一位同路人聊了聊他给我一个建议把目标从“每天AC”改成“每天收集一个不会的套路”。这一下把我从“题目没ac就是失败”的思维里解放出来。刷题过程中遇到的陌生模型本来就是这段时间最大的收获。还有一个心态层面的技巧不要和别人比进度。有人一个月就能把150题刷完有人每天二十道但这些数据对你没有参考意义。每个人接触算法的基础不同数据结构掌握程度不同比较只会带来不必要的焦虑。坚持自己的节奏把每天的一个小进步维持住时间会给你答案。5.4 Day97之后的延展方向150题全部过完一遍之后不代表刷题的终点到了。我认为这个题单真正的价值在于提供了一张地图后期延展有几个方向可以考虑。第一个方向是专项补短板找出自己最不稳定的专题比如动态规划再去额外找二三十道同类题集中刷直到形成肌肉记忆。第二个方向是做时间压力训练把做题时间从无限制压缩到30分钟、20分钟模拟真实面试节奏。第三个方向是参加在线编程竞赛周赛或双周赛的限时环境能提供一些模拟面试的效果也能暴露你在紧张状态下的短板。第四个方向是做面试模拟找人扮演面试官听你的思路讲解、看你白板写码的习惯这个输出过程能让很多隐性问题浮出水面。如果后续继续做这件可以长期主义的事我可能会把150题按专题再复盘一遍但这次不以“把题解背下来”为目标而是尝试把每个专题的题目用自己的话讲一遍形成一个最简明的算法导图。这不仅可以帮助面试表达也能让自己的知识体系更扎实。6. 经验沉淀与避坑清单6.1 刷题工具与环境配置工欲善其事必先利其器。一个好用的本地开发环境能省掉很多时间。我习惯在本地用 VS Code 安装竞赛类插件比如代码自动补全和高亮然后配合终端运行代码。写每一道题之前先写好测试用例至少三个示例输入、极端输入、随机输入。很多人不写测试用例直接提交错了再改提交次数自然多。在面试手撕代码时虽然没有判题机但你可以用等价的思路写完代码后自己用例子走一遍手动检查循环边界和分支条件这比干瞪眼有效。6.2 语言与API选型的细节建议面试常用语言无非 C、Java、Python、Go、JavaScript每一种都有各自的注意点。以 Python 为例循环里不要反复调用 len()每次调用都有开销直接存到一个变量里更好切片用起来很爽但会生成新数组有些场景下会带来额外空间消耗需要注意。以 Java 为例数组转 List 的 Arrays.asList 方法有坑不支持 add/remove只能用于读取否则会抛 UnsupportedOperationException。以 Go 为例经常忘掉的变量惰性赋值和切片扩容机制会影响结果。平时做题的时候最好有意识收集这些特别容易踩的语法坑每踩一个就记一次比看语言文档效率高。6.3 白板/在线编辑器手写代码的建议真正面试时你很可能不在自己熟悉的环境里。有的面试平台只有纯文本编辑器没有自动补全没有编译器提醒代码全靠手打。还有一些视频面试要求你在共享文档里写代码连高亮都没有。提前适应这种环境很重要。我之前听说某位同行在面试里因为把 Java 的 HashMap import 语句忘了而尴尬这种问题在本地 IDE 完全不会出现。所以平时要有意识地做一些“裸写”练习不用自动补全打开一个空白编辑器把常用数据结构比如队列、栈、堆、哈希表的创建代码默写一遍。相信我这种练习的性价比极高。6.4 面试中如何讲算法题而不只是写代码最后这点对于即将面试的人尤其重要。一道算法题代码正确只是及格线。真正拉开档次的是你如何把思路讲清楚。我建议每次做题以后给自己一个口头复盘按照四步讲第一步解读题意并确认输入输出的关键限制第二步提出一个暴力解并说明它的复杂度第三步分析暴力解的瓶颈在哪里引出优化方向第四步写出最终代码并逐段解释最后主动说出复杂度。这套话术练熟之后面试现场你基本不需要临场组织语言因为流程已经固化了。还有一个细节当你不确定题目某个边界情况时直接问面试官而不是埋头假设。比如“数组里可能有负数吗”“字符串只包含小写字母吗”“目标值不存在时我应该返回什么”这些问题都会体现你的工程思维。面试官通常是欣赏这类提问的因为它说明你在认真收敛需求边界。7. 写在Day97之后的一些真实体会如果只看进度条Day97只是时间长河里一个普通数字。但它背后是一段从“题目看不懂”到“看见题能形成条件反射”的慢慢转变。我个人在这段旅程里很重要的体会是刷题这件事情决定上限的不是天赋而是有没有一个正确的迭代闭环。每天做新题、复盘旧题、记录错误、抽象模板这个闭环运转起来以后进步的加速度才会出现。还有一个很土但管用的经验不要只在脑子里想写下来。无论是错误分析还是思路笔记写这个动作本身就是强制大脑进入逻辑状态。很多卡了很久的思路在我把问题写在纸上的那一瞬间忽然就通了。这或许是大脑需要一个外部存储来释放工作记忆的原因。如果你刚开始刷面试经典150我建议你不用羡慕那些已经刷完的人因为他们也是从Day1过来的。更重要的事情是订立一个不需要意志力硬撑的节奏让自己能心平气和地走到Day97。到这个阶段你会发现收获的早已不只是那一百多道题的解法还有一种面对未知问题依然能安静拆分的底气。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑