D

当前:LC34 · 查找首尾位置 · 两道闸门 lowerBound · 首次出现于 Day 7 · 路径:顶栏「56天打卡」→ 点击 LC 题号 → 逐题动画

正在加载 LC34 闸门动画...
任务控制 HUD
Step 1 / 16
题目1 / 16
速度
正在加载 LC34 闸门动画...
本步讲解 · 题目输入
当前发生了什么

我们要找的不是任意一个 8,而是整段 8 的左端和右端。

为什么正确

普通二分找的是一个点,LC34 找的是一段区间。重复元素在排序数组中一定连续,所以我们只要找到这段连续区域的左墙和右墙。左墙是第一个 >= target 的位置,右墙后一个位置是第一个 >= target+1 的位置。

面试怎么说

我不会用普通二分找到一个 target 就停,因为题目要的是 target 的完整区间。由于数组有序,相同元素一定连续,所以我把问题拆成两个 lowerBound:第一个 >= target 的位置是左边界,第一个 >= target+1 的位置是右边界后一个位置。最后检查左边界是否真的是 target,不是则返回 [-1,-1]。整体时间 O(log n),空间 O(1)。