在处理二分问题时我们总会疑惑mid = l + r >> 1 OR mid = l + r + 1>> 1
二分查找每次缩小范围时有两种情况,一种是l = mid,另一种是r = mid,当l=mid时mid必须要加1向上取整,不然会陷入l = l的死循环,而r = mid时不要用加1,因为下一步l=r会自动退出循环
具体代码如下
r = mid
int search(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
l = mid
int bsearch(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
只要像记公式一样记住该场景就再也不会出现纠结加不加1了。