/**
* @author chencc
* @Description 认识二分法
* @Date 2022/3/2 15:13
*/
public class Dichotomy {
//在一个有序数组中,找某个数是否存在
public static boolean isExist(int[] arr, int num) {
int L = 0;
int R = arr.length - 1;
int mid = 0;
while (L < R) {
mid = L + ((R - L) >> 1);
if (num < arr[mid]) {
R = mid - 1;
} else if (num > arr[mid]) {
L = mid + 1;
} else {
return true;
}
}
return arr[L] == num;
}
// 在arr上,找满足>=num的最左位置
public static int nearLeft(int[] arr, int num) {
int L = 0;
int R = arr.length - 1;
//初始指针
int index = -1;
while (L <= R) {
int mid = L + ((R - L) >> 1);
if (arr[mid] >= num) {
index = mid;
R = mid - 1;
} else {
L = mid + 1;
}
}
return index;
}
// 在arr上,找满足<=value的最右位置
public static int nearRight(int[] arr, int num) {
int L = 0;
int R = arr.length - 1;
int index = -1;
while (L <= R) {
int mid = L + ((R - L) >> 1);
if (arr[mid] <= num) {
index = mid;
L = mid + 1;
} else {
R = mid - 1;
}
}
return index;
}
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 5, 6, 7, 8, 9};
System.out.println(isExist(arr, 3));
}
}
二分法判断有序数组是否存在某个值,>=某个值的最左位置,<=某个值的最右位置
于 2022-03-03 13:38:41 首次发布