一、整数二分
说明:我们需要找到一个性质使得区间一分为二,左半部分是不满足这个性质的,右半部分是满足这个性质的。二分就可以找到该性质的边界,既可以是不满足的边界,也可以是满足的边界。
二分法可以帮助我们找到蓝色上的褐色点,也可以帮我们找到绿色上的黄色点。
二、二分法模板
1、找到蓝色的边界点(蓝色上的褐色点)
分析:
模板:
//区间[l,r]被划分为[l,mid-1]和[mid,r]使用
int BinarySearch(int l,int r){
while(l<r){
int mid=l+r+1>>1;
if(check(mid))l=mid;
else r=mid-1;
}
return l;
}
补充:
为啥这里的mid=l+r+1>>1,因为mid是下取整,如果mid=l+r>>1碰巧是满足条件的那么mid就等于l,则出现死循环所以我们必须要加一。