整数二分查找模版
二分模板
- 算法思路:假设目标值在闭区间
[l, r]
中,每次区间长度缩小一半,当[l, r]
时,即找到目标。
模板一
将区间划分为[l, mid]
和[mid + 1, r]
时,其更新操作为l = mid + 1
或r = mid
,计算mid时不加1。
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
return l;
}
模板二
将区间划分为[l, mid - 1]
和[mid, r]
时,其更新操作为r = mid - 1
或l = mid
,计算mid时加1。
while (l < r) {
int mid = l + r + 1>> 1;
if (check(mid)) l = mid;
else r = mid - 1;
return l;
}