static int leftIndex = -1;
//找最左侧的满足条件的数
public static int search(int[] arr, int left, int right, int value) {
if (left > right || value < arr[0] || value > arr[arr.length - 1]) {// value < arr[0] || value > arr[arr.length-1]提前退出,没有必要再执行了,提升效率
return -1;
}
int mid = (left + right) / 2;
if (arr[mid] >= value) {
int i = search(arr, left, mid - 1, value);
if (i == -1) {
leftIndex = mid;
}
} else {
search(arr, mid + 1, right, value);
}
return mid;
}
上代码
测试
int[] searchArr = new int[]{1, 2, 3, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10, 11,11, 12, 13, 14, 15, 16};
search(searchArr, 0, searchArr.length - 1, 11);
System.out.println("leftIndex = " + leftIndex);