/**
* @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 首次发布
这篇博客介绍了如何使用二分法在有序数组中查找特定数是否存在,并提供了寻找大于等于目标值的最左位置和小于等于目标值的最右位置的方法。通过实例代码演示了Dichotomy类的实现,适合理解二分搜索算法的应用。
907

被折叠的 条评论
为什么被折叠?



