算法介绍
二分查找是二分算法中的一种,主要分为整数二分和浮点数二分。其中,整数二分又分为两种情况,寻找左边界和寻找右边界,不同情况对应不同的模板。(注意:单调性不是二分的必要条件)
整数二分
模板一:
//整数二分(寻找左边界)
while (l < r) {
int mid = (l + r) / 2;
if (check(mid)) {
r = mid;
} else l = mid + 1;
}
模板二:
//整数二分(寻找右边界)
while (l < r) {
int mid = (l + r + 1) / 2;
if (check(mid)) {
l = mid;
} else r = mid - 1;
}
浮点数二分
浮点数二分没有边界问题,因此只有一个模板:
//浮点数二分
while (r - l > 1e-5) {//要保证一个精度
double mid = (l + r) / 2;
if (check(mid)) {
l = mid;//或者r=mid
} else r = mid;//或者l=mid;
}