3、整数二分查找
二分模板一共有两个,分别适用于不同情况。
算法思路:
- 假设目标值在闭区间
[1,r]
中,每次将区间长度缩小一半,当l=r
时,我们就找到了目标值
- 版本1
当我们将区间[1,r]
划分成[1,mid]
和[mid+1,r]
时,其更新操作是r = mid
或者1 = mid + 1
, 计算mid
时不需要加1。
int bsearch_1(int l ,int r)
{
while(l<r)
{
int mid = (l+r)/2;
if(check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
- 版本2
当我们将区间[1,r]
划分成[1,mid-1]
和[mid,r]
时,其更新操作是r = mid-1
或者1 = mid
, 计算mid
时需要加1。
int bsearch_2(int l ,int r)
{
while(l<r)
{
int mid = (l+r+1)/2;
if(check(mid)) l = mid;
else r = mid + 1;
}
return l;
}