二分查找的前提:
1.目标函数单调性(单增 单减)
2.存在上下界(bounded)
3.能够通过索引访问(index accessible)
实现intSqrt(int x)函数 (平方根函数) (二分查找)
class Solution{
public
int intSqrt(int x){
if(x0||x1) return x;
int
left=1; int right=x; 因为x时非负整数 所以左边界最低为1 右边界是x
while(left<right){
int
mid=left+(right-left)/2; 二分查找 right-left是为了防止越界的技术处理
if(mid*mid>x){ mid的平方大于x的时候说明中间数的平方大了
right=mid-1; 所以右边往左走 左边往右走 因为函数是递增的
}else
left=mid+1;
}
return x;
}
}
搜索旋转排序数组(二分查找)
public int search(int [] nums,int target){
int
lo=0; int hi=nums.length-1; 定义左右下标
while(lo<hi){
int
mid=(hi+lo)/2;
if(nums[0]<nums[mid]&&(target>nums[mid]||target<nums[0])){ 当旋转点不在0到mid之间时的判断
lo=mid+1;else
if{ target>nums[mid]&&target<nums[0]} 当旋转点在0到mid之间时的判断
lo=mid+1;else hi=mid;
}
}
return
lo==hi&&nums[lo]==target? lo : -1;
}