基本二分:
public int search(int[] nums, int target) {
int l=0;
int r=nums.length-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]>target)
r=mid-1;
else
l=mid+1;
}
return -1;
}
向左查找的二分:注意需要返回l
当找到需要的数时,一直向左执行r=mid-1,
当nums[mid]<taget时,下一步执行l=mid+1,l就是target开始的位置
public int search(int[] nums, int target) {
int l=0;
int r=nums.length-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(nums[mid]>=target)
r=mid-1;
else
l=mid+1;
}
if(l>=nums.length|| nums[l]!=target)return -1;//target不存在数组中
return l;
}
向右查找的二分:注意需要返回r
public int search(int[] nums, int target) {
int l=0;
int r=nums.length-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(nums[mid]>target)
r=mid-1;
else
l=mid+1;
}
if(r<0 || nums[r]!=target)return -1;//target不存在数组中
return r;
}