很多候选人刷题不少,但现场编码还是容易失误。原因不一定是不会算法,而是读题急、边界没想清、写完不测试、卡住后沉默。面试官看现场编码,不只看最终代码,也看你如何拆问题、如何沟通、如何发现错误。
编码题的第一步不是立刻写代码,而是复述需求。确认输入是什么、输出是什么、数据范围多大、有没有重复元素、是否需要保持顺序、空输入怎么处理。这个步骤能避免你写到一半才发现理解错题。
先给可行方案,再优化
如果一时想不到最优解,可以先说暴力方案。比如双层循环能解决但复杂度高,再说明瓶颈在哪里,尝试用哈希表、双指针、排序、栈或二分优化。面试官通常愿意看你从简单方案推进到更好方案,而不是一开始就沉默等灵感。
复杂度分析也要自然表达。不要只在最后补一句“时间复杂度是多少”,而要在选择方案时说明为什么这样做。比如用哈希表换时间,用排序换结构清晰,用双指针减少重复扫描。
边界条件要提前列
现场最常见的失分点是边界。数组为空、只有一个元素、全部相同、存在负数、目标不存在、字符串长度为零、链表只有头结点,这些都可能让代码出错。写代码前列两个正常样例和两个边界样例,能减少很多低级错误。
写完后不要马上说结束。用样例手动跑一遍关键变量变化,尤其是循环起止条件、指针移动、返回值。面试官会通过这个过程判断你有没有工程习惯。
卡住时要保持沟通
卡住并不可怕,长时间沉默才危险。可以说:“我先用一个简单方案保证正确,再看能不能优化。”或者“这里我不确定边界,我用一个例子跑一下。”这种表达能让面试官看到你的思考过程。
如果发现自己写错了,也不要慌。现场修正错误是正常的。关键是说明错误原因,比如边界少考虑了一种情况,或者循环条件多走了一步。能定位自己的错误,本身也是能力。
一套稳定流程可以是:复述题意,确认边界,给出暴力方案,分析瓶颈,写优化方案,手动跑样例,说明复杂度。这个流程不会保证每道题都做出来,但能显著减少会做却发挥失常的情况。
现场编码的可观察动作
现场编码不只是最终代码对不对,面试官会观察你的拆解方式。一个成熟的过程通常是:复述题意,给出朴素方案,说明复杂度,列边界,用样例走一遍,再考虑优化。
| 环节 | 容易失分 | 更好的做法 | 面试官看到什么 |
|---|---|---|---|
| 读题 | 直接开写 | 复述输入输出和限制 | 理解能力 |
| 设计算法 | 一上来追最优 | 先讲可行方案再优化 | 思路稳定 |
| 写代码 | 忽略空数组、重复值 | 提前列边界 | 工程习惯 |
| 调试 | 沉默找错 | 边说边定位变量变化 | 沟通能力 |
这篇文章可以提醒读者:不会最优解时不要硬撑。先把正确的朴素解讲清楚,再说明瓶颈和可能优化方向,往往比沉默五分钟更好。