我们将while(r - l > 1) //r 比 L大一退出循环
while循环写成这样,就不用再背二分函数L = mid + 1
还是 r = mid - 1
的问题了
统一为如下
mid <= targrt l = mid
mid > target r = mid
判断语句哪个包含目标结果就在末尾return哪个
所以我们一般在check
函数里将目标结果包含在里面
如此只需要reutrn L
即可
#### 二分模板
int bsearch(int l , int r)
{
while(r - l > 1) //r 比 l大一退出循环
{
int mid = l + r >> 1;
if(target >= a[mid]) l = mid; //判断语句哪个包含目标结果就在末尾return哪个
else r = mid;
}
return l;
}
倘若check
函数不包含结果,就需要return r
代码如下
int bsearch(int l , int r)
{
while(r - l > 1) //r 比 l大一退出循环
{
int mid = l + r >> 1;
if(target > a[mid]) l = mid; //判断语句哪个包含目标结果就在末尾return哪个
else r = mid;
}
return r;
}
对check函数进行分析:参考该同学的总结