返回mid的二分查找模板:
int binary_search(int[] nums,int target){
int left = 0,right = nums.length-1;
while(left<=right){
int mid = left+(right-left)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] > target){
right = mid - 1;
从右端向mid逼近
}
else if(nums[mid] < target){
left = mid + 1;
从左端向mid逼近
}
}
return -1;
}
返回left的二分查找模板:
int binary_search(int[] nums,int target){
int left = 0, right = nums.length-1;
while(left<=right){
int mid = left+(right-left)/2;
if(nums[mid] == target) right = mid-1;
从右端向left逼近
else if(nums[mid] > target){
right = mid-1;
从右端向left逼近
}
else if(nums[mid] < target){
left = mid + 1;
}
}
if(left>=length || nums[left]!=target){
return -1;
}
return left;
}
返回right的二分查找模板:
int binary_search(int[] nums,int target){
int left = 0,right = nums.length-1;
while(left<=right){
int mid = left+(right-left)/2;
if(nums[mid] == target) left = mid+1;
从左端向right逼近
else if(nums[mid] > target){
right = mid-1;
}
else if(nums[mid] < target){
left = mid+1;
从左端向right逼近
}
}
if(right<0 || nums[right]!=target){
return -1;
}
return right;
}
习题1:
习题1链接