此种题目一般是“二分值越小越容易满足条件”,然后求符合条件的最大值。
区间长度为1时的写法:
解的范围为 [lb,rb]
// 计算区间为[lb, rb]
while( rb > lb ) // 区间长度为1时终止循环
{
// 防止溢出
int m = lb + (rb - lb + 1) / 2; // 由于是区间长度为1时终止循环,所以要加1
if( ok(m) ) lb = m;
else rb = m - 1;
}
// 跳出循环时 lb == rb
最小化最大值
此种题目一般是“二分值越大越容易满足条件”,然后求符合条件的最小值。
区间长度为1时的写法:
解的范围为 [lb,rb]
。
while( rb > lb )
{
// 防止溢出
int m = lb + (rb - lb) / 2; // 这里虽然区间长度为1,但不需要加1(不会死循环)
if( ok(m) ) rb = m;
else lb = m + 1;
}
// 跳出循环时 lb == rb
本文详细介绍了二分搜索法中的两种常见场景:最大化最小值与最小化最大值的问题解决策略。通过具体的代码示例展示了如何确定搜索区间及更新边界条件,帮助读者深入理解二分搜索的应用。
2466

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



