1、手动二分查找
二分模板其实有两套,主要是根据要调整的是 left 指针还是 right 指针来判断。
口诀:加一左为中,对半右为中
- 调整left时:左区间端点可能包含目标值的时候
public static int binarySearch(int[] arr, double num){
int left = 0;
int right = arr.length - 1;
while(left < right){
int mid = (left + right + 1) >> 1;
if(arr[mid]>num){
right = mid - 1;
}else{
left = mid;
}
}
return left;
}
- 调整right时:右区间端点可能包含目标值的时候
public static int binarySearch(int[] arr, double num){
int left = 0;
int right = arr.length - 1;
while(left < right){
int mid = (left + right) >> 1;
if(arr[mid] < num){
left = mid + 1;
}else{
right = mid;
}
}
return left;
}
2、通过Java工具类
int ans = Arrays.binarySearch(arr, num);