拿下技术面上传简历

有一个升序数组 nums,长度 n = 10^6,允许有重复元素(例如 [1,2,2,2,3,5])。写一个函数返回 target 第一次出现的下标,不存在返回 -1。请说明你的循环不变量是什么、while 条件写 lo < hi 还是 lo <= hi、为什么 hi 的更新是 hi = mid 而不是 hi = mid - 1,以及 mid 怎么算。

数据结构与算法图与搜索1-3 年知识点 1 个

面试官在考什么

判断候选人是否真理解二分的边界不变量,还是只会在没有重复元素时写"找到就返回"的模板。

二分查找

回答框架 · 前两步

  1. 循环不变量:答案(第一个等于 target 的下标,或者说 lower_bound 的位置)始终落在搜索区间内;建议用左闭右开 [lo, hi),初始 lo=0、hi=n。
  2. 用 while (lo < hi)、mid = lo + (hi-lo)/2(下取整)、hi = mid:这样收敛到左边界且不会死循环;若写 hi = mid - 1 会把可能的答案跳过去。

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

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

延伸阅读

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

同一能力域的其他题