拿下技术面上传简历

有一个按 key 非降序排列的数据集,共 10^9 条,存在远端存储上,只提供两个接口:get(i) 读取第 i 条记录(一次调用约 5ms,支持随机访问),size() 返回总条数。数据中 key 有大量重复。请实现 lower_bound(target):返回第一个 key >= target 的下标,都不满足则返回 size()。写出代码,并说明你对哪些边界做了处理、每一处为什么这么处理。

代码能力与调试排障现场编码3-5 年知识点 1 个

面试官在考什么

判断候选人写的二分是否在「重复元素 + 空集合 + 越界 + 远程读成本」四个条件下同时成立,而不是只背了一个 while(left<=right) 的模板。

边界处理

回答框架 · 前两步

  1. 接口约束决定只能二分:O(log N) 次 get,约 30 次远程调用;全量扫描不可行
  2. 区间语义要写死:答案落在 [lo, hi) 且返回 lo 即第一个 >= target;收缩时命中 target 必须继续向左(hi = mid),不能写成 mid-1

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

同一能力域的其他题