那天面试一开始,面试官直接把题目贴出来
“You are given a sorted list of distinct integers from 0 to 99… produce a string describing missing numbers.”
我简单确认了一下条件:
- 输入是否一定有序、无重复
- 范围是否固定在 0 到 99
- 是否可能为空数组
接下来我用例子在白板上走了一遍:
[0, 1, 2, 50, 52, 75]
脑子里的动作其实很简单,就是盯着“空档”。
3 到 49 是一段,51 是单个,53 到 74 又是一段,最后 76 到 99。
面试官看的是有没有把问题转成“找间隔”,这一点一旦想清楚,后面就很自然。
我开始讲思路,没有绕弯:
整体就是一次线性扫描,每次看当前数字和前一个数字之间有没有断层。
关键点有三个:
- 如果差值大于 1,说明中间有缺失
- 缺一个数,直接写数字
- 缺多个数,用区间 start-end
还有两个容易漏的地方:
- 开头:0 到第一个元素之间
- 结尾:最后一个元素到 99
写代码的时候,我会刻意把结构压简单。
引入一个 prev,初始化为 -1,这样开头可以统一处理。
每次遇到 num,就判断 num - prev:
- 大于 1 → 生成区间
- 等于 1 → 什么都不做
最后再单独处理一次 99。
字符串拼接我不会在循环里做,而是先收集结果,再 join,这一点面试官也专门问了一下。
复杂度这里不需要铺陈:
- 时间复杂度:O(n),只扫一遍
- 空间复杂度:O(n),最坏情况下每个缺失都是单点
后面给了一个变体:
范围从固定的 0~99,变成 lower 和 upper。
这里我没有重写逻辑,只做了两件事:
- 把
prev改成lower - 1 - 把结尾的 99 改成
upper
整个思路是完全复用的,这种改法面试官会比较认可。
这些如果在面试现场才临时想,很容易断节奏。
如果你最近有 VO 面试,提前准备这些 真实题型和思路,会非常关键。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

