版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z591826160/article/details/84328198
关于二分边界的讨论
有许多的问题都会使用到二分,但就整数二分的情况就有4种
这里总结了一下情况,没什么好多说的,直接上代码吧
左开右闭
while(l<r){
int mid=(l + r) >>1;
if(check(mid))
l=mid+1;
else
r=mid;
}
cout<<l<<endl;
左开右开
while(l<=r){
int mid=(l + r) >>1;
if(check(mid)){
l=mid+1;
ans=mid;
} else
r=mid;
}
cout<<ans<<endl;
左闭右开及左闭右闭
while(r-l>1){
int mid= (l + r);
if(check(mid))
l=mid;
else
r=mid; // r=mid-1;
}
if(check(r))
cout<<r<<endl;
else
cout<<l<<endl;
浮点数二分
while(r-l>eps){
double mid = (l + r) /2;
if(check(mid))
l=mid;
else
r=mid;
}
cout<<l<<endl; //或cout<<r<<endl;