Binary_Search

此文介绍了普通二分查找的模板

二分查找算法模板

二分模板一共有两个,分别使用于不同情况。

算法思路:假设目标位于闭区间 [l,r] 中,每次将区间长度缩小一半,当 l=r 时,我们就找到了目标值。

版本一

当我们将区间划分成 [l,mid] 和 [mid+1,r] 时,其更新操作是 r=mid 或者 l=mid+1;计算mid时不需要加1。

C++代码模板

int bsearch_1(int l, int r)
{
  while(l<r){
    int mid=l+r>>1;
    if (check(mid)) r=mid;
    else l = mid+1;
  }
  return l;
}

版本二

当我们将区间[l,r]划分成[l,mid-1]和[mid,r]时,其更新操作是 r=mid-1或者l=mid,此时为了防止死循环,计算mid时需加1

C++代码模板

int  bsearch_2(int l, int r)
{
  while(l<r)
  {
    int mid = l+r+1 >>1;
    if(check(mid)) l=mid;
    else r=mid-1;
  }
  return l;
}