拿下技术面上传简历

对有序数组 nums = [1,2,2,2,5,7] 写一个 lower_bound(target):返回第一个 ≥ target 的下标,若所有元素都小于 target 则返回 n。请说明你用的循环不变式(左右区间代表什么),并给出 lower_bound(2)、lower_bound(6)、lower_bound(0) 的返回值;如果 l、r 都是可能接近 int 上限的下标,mid 该怎么写?

数据结构与算法图与搜索校招知识点 1 个

面试官在考什么

判断候选人是真会写边界二分,还是只会背"有序数组找 target"的模板;重点看区间语义自洽和防溢出意识。

二分查找

回答框架 · 前两步

  1. 返回值:lower_bound(2)=1,lower_bound(6)=6(等于 n,表示不存在),lower_bound(0)=0。
  2. 常用自洽写法:区间取左闭右开 [l, r),循环条件 l < r,mid = l + (r-l)/2;若 nums[mid] < target 则 l = mid+1,否则 r = mid;结束时 l == r 即答案。

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

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

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题