首先,我们给出二分的模板
public int binarySearch1(int l, int r){
while(l<r){
int mid = r + l >> 1;
if(check(mid)){
r = mid;
}else{
l = mid + 1;
}
}
return l;
}
public int binarySearch2(int l, int r){
while(l<r){
int mid = r + l + 1>> 1;
if(check(mid)){
l = mid;
}else{
r = mid - 1;
}
}
return l;
}
其次,我们解一下求整数的平方根,我们从0到目标值这段区间开始二分查找某个数的平方等于目标值,即可查出对应的平方根
class Solution {
public int mySqrt(int x) {
// 定义 其实变量
int l = 0;
// 定义 结束变量
int r = x;
// 当其实变量小于终止变量,则继续循环
while(l < r){
// 获取中间变量
int mid = l + r + 1>> 1;
// 如果中间变量的结果小于等于 目标值
if(mid <= x/mid){
// 则左边界更新为中间值
l = mid;
}else {
// 否则有边界更新为中间值减1
r = mid - 1;
}
}
// 返回结果
return l;
}
}