关于二分边界的讨论

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;

猜你喜欢

转载自blog.csdn.net/z591826160/article/details/84328198