二分搜索算法模板
1.最基本的二分搜索算法
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;
}else if(nums[mid] > targrt){
right = mid - 1;
}else if(nums[mid] == target){
return mid;
}
}
return -1;
}
2.寻找左侧边界的二分搜索算法
int left_bound(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;
}else if(nums[mid] > target){
right = mid - 1;
}else if(nums[mid] == target){
right = mid - 1;
}
if(left >= nums.length || nums[left] != target){
return -1;
}
return left;
}
}
3.寻找右边界的二分搜索算法
int right_bound(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;
}else if(nums[mid] > target){
right = mid - 1;
}else if(nums[mid] == target){
left = mid + 1;
}
}
if(right < 0 || nums[right] != target){
return -1;
}
return right;
}