为了迎接蓝桥杯,一个算法小白的备战,总结一下二分模板,感觉这块容易错,如有不正确,欢迎大家纠正
首先一定要转变一个概念,使用二分法不一定要求有序,只要求可以确定答案一定会出现在其中一边即可
int min(int l,int r)//[l,r]区间
{
while(l<r)
{
int mid=l+r>>1;
if(check(mid))
r=mid;
else
l=mid+1;
}
return l; //找合法的最小值
}
int max(int l,int r)//找合法的最大值
{
while(l<r)
{
int mid=l+r+1;//取最大值这里要注意要加上一个1
if(check(mid))
l=mid;
else
r=mid-1;
}
return l;
}