#34
Medium
二分搜索

Find First and Last Position

在有序数组中返回目标值的起始和结束位置。

ArrayBinary Search

题目定位

这是最标准的左右边界二分题:数组已排序,目标条件也非常清晰。

关键观察

左边界和右边界本质上是两种不同的判定,因此应该分成两次二分。

目标复杂度

O(log n) / O(1)

这题的解法思路怎么拆

1

这是最标准的左右边界二分题:数组已排序,目标条件也非常清晰。

2

左边界和右边界本质上是两种不同的判定,因此应该分成两次二分。

3

先用自然语言写出单调判定条件。

4

确保搜索区间一定覆盖答案。

参考实现

Python
# Generic pattern template
# Find first position where check(mid) is true
left, right = 0, n
while left < right:
    mid = left + (right - left) // 2
    if check(mid):
        right = mid
    else:
        left = mid + 1
return left

常见坑点

warning

试图一次二分同时拿到两个边界,导致逻辑很脆。

warning

把第一次命中的 mid 直接当成边界返回。

高频追问

你能把两次搜索都改写成 first true 吗?

如果目标不存在,边界应该怎样表示?

继续刷相关题

先把 二分搜索 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 34. Find First and Last Position 题解思路 | Interview AiBox