二分搜索法,是通过不断缩小解存在的范围,从而求得最优解.
基本型式: 范围(1~n)
以l端始终为满足条件,r端始终为不满足条件为例.
l = 0; //如若存在没有答案的情况下,0才是必然符合条件的数字,其余情况下,1才是符合条件的数字.
r = n+1; //n+1是必然不符合条件的数字
while (r-l <= esp) { //如若是实数,esp则为需要确保的精度,如若是整数,则为1
mid = (l+r)/2; //如若是整数,则需要视其满足条件一段拓展的方向而定, 本例中是希望l不断扩
//大,则需要用ceil函数来向上取整,如若是希望r不断缩小,则用floor函数.
if (check(mid)) //check()是个判断函数,判断输入的参数是否符合要求
l = mid; //如若符合要求,则扩大l,l继续保持满足条件的性质
else
r = mid; //如若不符合要求,则缩小r, r继续保持不满足条件的性质
}
ans = l; 答案即是l
另一种:
l为给定的初始范围起始,r为给定的初始范围末
l = 1; //如若存在没有答案的情况下,0才是初始范围
r = n;
whi