题目定位
这是最标准的左右边界二分题:数组已排序,目标条件也非常清晰。
关键观察
左边界和右边界本质上是两种不同的判定,因此应该分成两次二分。
目标复杂度
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 吗?
如果目标不存在,边界应该怎样表示?
继续刷相关题
先把 二分搜索 这个模式刷成体系,再去做更难变体。