力扣刷了四百道,还是卡在第一百零七道
几乎每个挂掉的故事里都有同一个情节:那道题他做过。双指针的技巧他也知道。然后面试官说了一句“开始吧”,四十分钟就消失在一个空白的编辑器里。缺的不是练习,缺的是在被注视的条件下练习。
进了面试间,到底变了什么
在家做题,你是带着整套装备的:约束条件可以再读两遍,示例可以往下翻,想法可以试一下再删掉,删掉的那一行没有人看见。也没有一个你能感觉得到的计时器——卡住四分钟,这四分钟不要钱。
面试里全部反过来。卡壳是可见的,删掉的那行是被看着删的。而且你的注意力有很大一块,现在要用来揣摩对面怎么看你——这块注意力就不在题目上了。
这就是为什么刷了四百道的人,仍然会在第一百零七道上卡住。题目不是新的,条件是新的。
前六十秒决定了后面四十分钟
大多数人一上来就开始敲,因为沉默让人觉得像失败。这恰恰是最差的一步:你在还没看清输入的形状之前,就把自己绑在了一个思路上;等到第二十分钟发现不对,已经没有时间回头。
表现好的人把第一分钟花在出声说三件事上:用自己的话复述题目、点出真正起作用的那个约束、说明你要优化的是什么。“所以是要找出所有和为 target 的数对,数组是有序的,n 可以到十万——那 O(n²) 就出局了。”
这一句话同时办成三件事:确认你听懂了题;让面试官看到你的推理是扣着约束走的;并且买下六十秒思考时间,而这段时间读起来是“有把握”,不是“僵住了”。
怎么说“我还没想到”而不丢掉这一场
卡住有两种版本:一种会让你挂掉,一种不会。区别在于面试官能不能看见你卡在哪。
沉默地卡住是致命的。两分钟什么都不说,看着你的人分不清你是在思考还是在溺水,于是默认是后者。
讲出来的卡住能活下来,有时甚至加分。“暴力解显然是 O(n²)。我想用空间换时间,一直想往哈希表上靠——但还没想清楚 key 该取什么。”到这里你已经告诉他:方向你有,取舍你懂,差的是具体的一步。面试官通常就在这个时候给提示,因为你问的是一个真问题,而不是投降。
和算法完全无关的那一部分
去问任何一个面过一百场的人:同样水平的两个人,一个过一个不过,差别在哪?几乎没有人会回答“最优解”。他们会说一些关于“这四十分钟能不能跟这个人一起干活”的话。
他是在动手前就问边界情况,还是被提醒了才问?第一个思路被推翻时,他是护着它,还是放掉它?拿到提示,他是接住往前走,还是跟你争?
这些力扣上一条都没有。而这些全都在评分表上。
怎么练真正被考的那一半
继续刷题,练的是你已经有的那一半。要练另一半,要改的是条件,不是数量。
一个人出声解题,开着计时器。前十分钟会觉得很蠢,之后就不蠢了。如果你对着空房间都讲不出自己的推理,被一个陌生人看着时更讲不出来。
然后拿已经做过的题重做一遍,边做边讲。目标不是答案——答案你知道。目标是你思考的同时嘴里出来的那句话。
三种翻车方式,各长什么样
- 僵住。题读完了,脑子里什么都没来,沉默开始滚雪球:每一秒都让下一秒更难,因为你现在还在想“我已经安静多久了”。出路是机械的,不是灵感式的——哪怕很丢人,也先把暴力解讲出来:“最直接的办法是枚举所有数对,O(n²),太慢,但我先从这儿开始再优化。”出声的暴力解永远好过沉默,而且常常正是它把真正的解法带出来的,因为你已经动起来了。
- 押错了方向。第二分钟锁定一个思路,第二十五分钟发现它处理不了重复元素,而跑道已经没了。这一种要在更早的地方拦住:动手前说出你的思路依赖什么假设——“这个做法要求元素不重复,这一点有保证吗?”面试官会告诉你,你也就绕开了他埋的坑。
- 默默地重写。十分钟后你意识到结构错了,于是全选、删除。从外面看,这像慌了。讲出来,它就变成判断力:“这里越写越乱,是因为容器选错了。我重来,改用堆,两分钟。”同一个动作,完全相反的读法。
真的没见过这道题,怎么办
有时候题目确实陌生,讲多少也讲不出那个技巧。这在很强的工程师身上也会发生,并不自动等于挂。
有用的是把“你怎么进攻一道没见过的题”演示出来,因为那才是真实的工作。从最小的输入开始手算:写出 n=1、n=2、n=3,看它们之间变了什么。一边做一边说。规律从例子里浮出来的次数,远多于从盯着题面看。就算这次没浮出来,面试官也看到了你在压力下有纪律地往前推进——而这差不多就是他来看的东西。
真正输掉的答案是自信的编造:一个听起来像那么回事、其实跑不通的算法,讲的时候还毫不犹豫。面试官一验就塌,然后他会开始怀疑你说过的其他每一句话。
复杂度:别等人问
几乎每一轮编程面试最后都会有一句“复杂度是多少”——被问到了才答,是一个很小但完全可以避免的损失。它传达的信号是:你写的时候没有在想代价。
边走边说。当你伸手去拿哈希表时,就把它买到了什么、花了什么说出来:“这样查找是常数时间,代价是 O(n) 的额外空间——这里值得,因为 n 很大,而内存不是瓶颈。”这样一来,取舍就以“你做的决定”记录在案,而不是“你被逼承认的事实”。
如果面试官问“还能更好吗”,这通常不是陷阱,而是邀请。第一反应最好是反问一句:要优化的是时间、空间,还是可读性?这三者方向并不一致,能出声注意到这一点,本身就是信号。
副驾驶站在哪个位置
Interview Copilot 听着这一轮,在面试官还在说话的时候,就把结构放到你的屏幕上:这道题真正在问什么、哪个约束把某个思路排除掉了、值得出声说出来的取舍是什么。它不是一份拿来照读的答案——照读答案,看着你的人一眼就能看出来。它是当空白的那一刻到来、你自己的话还没回来时,你可以扶着开口的那个架子。
FAQ
为什么力扣刷了很多,面试还是过不了?
因为面试考的是刷题练不到的东西:一边解一边讲、接住提示、第一个思路失败后怎么收。这些和“一个人不限时地写出正确解”是分开的能力。
遇到没见过的题该怎么说?
直说,然后从暴力解开始:“这道我没见过,我先写个能跑的,再优化。”这很正常,也在预期之内;假装见过,通常的结局是沉默。
要不要不等人问就主动说复杂度?
要。在被问到之前说出“这里是 O(n log n),因为排序;空间 O(n)”,既补上了评分表上的一行,也说明你在想代价,而不只是在想输出。
面试时紧张到脑子空白,怎么办?
把出路做成机械动作,而不是等灵感:出声描述最直接的暴力解,哪怕它很笨。开口本身会让思路重新动起来,而沉默只会让下一秒更难。