y总的二分模板,自存。
//当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,
//其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。
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。
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;
}
这篇博客详细介绍了两种不同的二分查找模板,分别是针对区间[l, mid]和[l, mid-1]的划分。作者解释了在更新操作中如何防止死循环,并给出了相应的检查条件。内容适用于算法学习和优化,对于提升编程技能非常有帮助。
1719

被折叠的 条评论
为什么被折叠?



