二分法模板

二分法的模板

image-20220613135821257

模板一:

当mid在绿色区域,也就是 a[mid]>=target。使用下列模板:

区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:

1
2
3
4
5
6
7
public void way1(int l,int r,int target){
while (l < r) {
int mid = (l + r) >> 1;
if (a[mid] >= target) r = mid;
else l = mid + 1;
}
}

模板二

当min在红色区域,也就是a[mid]<=target.使用下列模板。

区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:

1
2
3
4
5
6
7
public void way2(int l,int r,int target){
while (l < r) {
int mid = (l + r + 1) >> 1;
if (a[mid] <= target) l = mid;
else r = mid - 1;
}
}

二分法模板
http://example.com/2022/06/13/二分法模板/
作者
zlw
发布于
2022年6月13日
许可协议