二分算法是一种广泛用于查找的算法,本质是根据题目条件先确定check函数进行边界放缩的判断,常见的模板如下:
整数二分:
左边界二分
//左边界二分查找模板
int midSearch1(int l,int r,int k){
while (l < r){
int mid = (l + r) >> 1;
if(check()){
r = mid;
}else{
l = mid + 1;
}
}
return l;
}
右边界二分:
//右边界二分查找模板
int midSearch2(int l,int r,int k){
while (l < r){
int mid = (l + r + 1) >> 1;
if(check()){
l = mid;
}else{
l = mid - 1;
}
}
return l;
}
浮点数二分:
//浮点数二分
double midSearch3(double l,double r,double k){
//?表示需要的精度
while(r - l < ?){
double mid = (l + r) / 2;
if(check()){
l = mid;
}else{
r = mid;
}
}
return l;
}
以上即为二分常用模板,利用这些模板可以解决大部分的题。