package class01.question01;
import java.util.Arrays;
public class BiNearLeft {
public static int biNearLeft(int[] arr ,int target) {
if (arr == null || arr.length == 0) {
return -1;
}
int left = 0;
int right = arr.length - 1;
int mid = 0;
int index = -1;
while (left <= right) {
mid = left + ((right - left) >> 1);
if (arr[mid] >= target) {
index = mid;
right = mid - 1;
}else {
left = mid + 1;
}
}
return index;
}
public static int compareFunction(int[] arr,int target){
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= target) {
return i;
}
}
return -1;
}
public static int[] randomGenrateArr(int maxValue,int maxLength) {
int[] arr = new int[(int) (Math.random() * (maxLength+1))];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (maxValue + 1)) - (int) (Math.random()*maxValue);
}
return arr;
}
public static void printArr(int[] arr) {
if (arr == null) {
System.out.println("null");
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int maxValue = 100;
int maxLenth = 100;
for (int i = 0; i < 1000; i++) {
int[] arr = randomGenrateArr(maxValue, maxLenth);
Arrays.sort(arr);
int target = (int) (Math.random() * (maxValue + 1)) - (int) (Math.random()*maxValue);
if (biNearLeft(arr,target) != compareFunction(arr,target) ) {
printArr(arr);
System.out.println(target);
System.out.println(arr[biNearLeft(arr, target)] );
System.out.println(arr[compareFunction(arr, target)]);
return;
}
}
System.out.println("success");
}
}