查找边界:第一个与最后一个位置
一、面试常考点
1. 左边界与右边界
左边界在 nums[mid] >= target 时收缩右侧;右边界反之。
2. 常见追问
为什么不能复用同一个判断式直接找两端。
二、细节介绍
1. 左边界
找到第一个 >= target 的位置。
2. 右边界
找到最后一个 <= target 的位置。
三、示例代码
function lowerBound(nums, target) {
let l = 0
let r = nums.length
while (l < r) {
const mid = l + ((r - l) >> 1)
if (nums[mid] >= target) r = mid
else l = mid + 1
}
return l
}
四、常用应用场景
1. 区间计数
统计某值出现次数、某区间元素数量。
2. 日志检索
按时间戳快速定位起止区间。