OPALL

OPALL-F-017 · STUDY · 已整理 ORGANIZED · 前置:F-016 · 相关:N-012

手撕不是一道题,是一条题链

The coding round is a ladder

手撕环节里,写对第一道题不是终点,是起点——面试官紧接着把它升级成变体。考的从来不是你会不会那道题,是你的解法经不经得起往上加一级。

01熟悉的场景THE FAMILIAR SCENE

刷了几百道题,面试手撕却还是慌。不是不会做——第一道题往往顺利写出来了,慌的是紧接着那一句:"能不能更快?""如果数组是旋转过的呢?""不用额外空间行不行?"题目在你眼前长出了新的一节,而你刷题时练的是"做出一道题",不是"接住一道题的变体"。

这不是运气差碰上了刁难。这是手撕环节的默认结构——它本来就不是让你默写一道题,是看你能不能顺着一条链往上走。

02为什么是题链WHY A LADDER

AI 会写代码之后,"能写出一段能跑的解"不再区分人(N-012 讲的换轴:考产出退场,考判断进场)。于是手撕的重心从"你能不能写出来"移到了"这段解是你理解的还是背下来的"。而区分这两者最省事的办法,就是升级。

背下来的解是一个定点:题目一变,它接不上。理解出来的解是一条斜坡:知道自己现在站在复杂度的哪一级,也知道往上一级要改哪个判断。面试官加的每一级变体,都是在测你站的是定点还是斜坡。

所以"我这道题会做"其实是个会骗人的判断。真正的问题是:这道题往上加一级,你还接得住吗?接不住,说明你会的是答案,不是方法。

03一条真实的题链A REAL LADDER

下面这条链来自真实面试的手撕环节,全是公开经典题,可以直接点名对照着练——它示范的不是这三道题本身,是"链"这个结构。

第一级 · 判断平衡二叉树(LeetCode 110)。裸写一个递归,对每个节点求左右子树高度、比较差值——能过。但它是最坏 O(n²):求高度本身遍历了一遍,外层每个节点又调一次。面试官下一句几乎注定是:"能不能一次遍历?"接得住的人把它改成自底向上:求高度的同时返回"是否已失衡",一趟 O(n) 搞定。这一级考的不是会不会判断平衡,是你知不知道自己那版是 O(n²)。

第二级 · 简化相对路径(LeetCode 71)。换一类数据结构:把路径按 / 切段,用栈处理 ...、连续斜杠、结尾斜杠。这一级考的是边界——那几个特殊段你有没有一个都不漏地想全。写之前先把边界列出来,比一边写一边补,稳得多。

第三级 · 连环题:先标准二分(LeetCode 704),写对当场升级成旋转有序数组找目标(LeetCode 33)。这是"链"最清楚的一级。标准二分先考你收敛边界(left<=right、mid 别溢出);写对了,题目立刻旋转数组——同一个二分框架,只多一步"先判断哪半边有序,再决定往哪半边收"。能顺下来的人,靠的不是做过 LC 33,是他 704 那版二分理解得够深,加得动这一级。

三级放在一起看,规律就出来了:每一级都不是新题,是上一级往一个方向加了压——加复杂度要求、加边界、加约束。准备的靶子,是这个"加"。

04准备的是路径,不是题量PREPARE THE PATH

题链结构直接改写了刷题的性价比:题海没有必要,但每道做过的题,要能讲清"从暴力到最优"的那条路径。

具体三件事,比多刷两百道有用:

每道题都先写暴力解,再优化。别一上来抄最优。暴力解是你的第一级,优化的过程就是升级本身——刷题时把这条路自己走一遍,面试时被要求"更快"才不是第一次遇到。

每道题都能说出自己解的复杂度,以及卡在哪。"我这版是 O(n²),瓶颈在重复求高度"——说得出这句,你就站在斜坡上;说不出,你只是记住了一个能过的写法。

按方法归类,不按题号收藏。二分、栈处理字符串、树的自底向上、双指针……记的是"哪类问题用哪个框架、变体往哪个方向加"。面试出的是你没见过的题,但很少是你没见过的方法。

一句话:刷题的单位不是刷过多少道,是有多少条路径你能从头讲到尾。

05手撕是沟通,不是默写A CONVERSATION

还有一层容易被忽略:手撕从来不是闭卷默写,是一个带追问的沟通过程——N-012 说得直接,"粘贴来的答案两句追问就穿帮"。所以过程里说出来的话,和写出来的代码一样被打分。

写之前先说思路和复杂度,让面试官知道你要往哪走;卡住时说清卡在哪、在权衡什么,而不是闷头僵着;写完主动说边界和没覆盖的情况。这套沟通习惯和 F-016 里项目追问的四段接法是同一件事——都是把"我怎么想的"显式地讲出来,让对方看见你的判断过程,而不只是结果。

这也解释了为什么 AI 帮不上手撕的忙:它能给你答案,给不了你"当场被追问时接得住"的那条斜坡。那条斜坡只能自己一级一级走出来。

06连回判断TO THE NOTES

这份底稿是求职线算法侧的展开:面试为什么从考产出转向考判断,判断在 N-012 AI 时代的技术面试——手撕题链是那篇"考判断不考产出"在算法环节的具体形态。项目环节的对应招式,见 F-016 三十次追问:一个是算法题往上加变体,一个是项目往下追证据,两者考的是同一种东西——你的答案是背的,还是长在你自己的理解里(这正是 F-009 的复述检验)。

底稿负责告诉你手撕是一条链;每一级怎么爬,得自己动手。

07自测清单SELF CHECK

  • 最近做的一道题,说得出你的解是 O(几)、瓶颈在哪吗?
  • 你练的是"做出一道题",还是"接住它的下一级变体"?
  • 每道题都先写过暴力解,再自己优化吗——还是直接抄最优?
  • 你的题是按方法归类的,还是按题号收藏的?
  • 手撕时你会边写边说思路,还是闷头默写?