public class 二分数组 {
//1.有序数组中判断number是否存在
public static boolean BinarySearch (int [] arr ,int number ) {
if (arr.length<2||arr==null) {
return false ;
}
int left = 0 ,right = arr.length-1;
int middle=(left+right)>>>1 ;
while (left<=right) {
if (arr[middle]==number) {
return true ;
}else if (arr[middle]<number) {
left= middle+1 ;
}else {
right = middle-1 ;
}
}
return false ;
}
//2 在有序数组中找到>=number的最左位置 ;
public static int findLeft(int [] arr ,int number ) {
int left = 0 ,right = arr.length -1;
int answer = -1 ;
while (left<=right) {
int middle= (left+right)>>>1;
if (number>arr[middle]) {
left = middle+1;
} else if (number==arr[middle]) {
answer= middle ;
right = middle-1;;
}else {
answer= middle ;
right= middle-1;
}
}
return answer ;
}
//3 在有序数组中找<=num的最左位置;
public static int findRight(int arr[] ,int number) {
int left = 0 ,right = arr.length - 1 ;
int middle = 0 ;
int answer = -1 ;
while (left<=right) {
middle= (left+right )>>>1;
if (arr[middle]>number) {
right = middle-1 ;
}else if (arr[middle]==number) {
answer= middle ;
left = middle+1 ;
}else {
answer= middle;
left = middle +1 ;
}
}
return answer ;
}
}