public class SearchLeftNumber {
public void searchleftnumber(int[] arr,int mid){
if(mid == 0){
System.out.println("数值" + arr[mid] + "在数组中最左侧的位置是:" + mid);
return;
}
while(arr[mid] == arr[mid-1] && mid>0){
mid--;
}
System.out.println("数值" + arr[mid] + "在数组中最左侧的位置是:" + mid);
}
public void searchrightnumber(int[] arr,int mid){
if(mid == 0){
System.out.println("数值" + arr[mid] + "在数组中最右侧的位置是:" + mid);
return;
}
while(arr[mid] == arr[mid+1] && mid<arr.length){
mid++;
}
System.out.println("数值" + arr[mid] + "在数组中最左侧的位置是:" + mid);
}
public int SearchNumber(int[] arr,int a){
int len = arr.length;
if(len == 0){
System.out.println("数组为空!所查找数值" + a + "不存在!");
return -1;
}
int left = 0;
int right = len-1; //左闭右闭区间
while(left <= right){
int mid = left + ((right - left) >> 1);
if(arr[mid] == a){
System.out.println("所查找数值" + a + ",在数组下标" + mid + "的位置");
return mid;
}
else if(arr[mid] > a){
right = mid -1; //左闭
}
else{
left = mid+1;//右闭
}
}
System.out.println("数组中不存在所查找数值" + a);
return -1;
}
public static void main(String[] args){
int[] arr = new int[] {1,1,1,3,4,4,5,5,6,7,8,8,8,8,9,9,9,9,9,45,67,89,90}; //从大到小有序
int a = 9;
SearchLeftNumber searchLeftNumber= new SearchLeftNumber();
int mid = searchLeftNumber.SearchNumber(arr,a);
if(mid >= 0){
searchLeftNumber.searchleftnumber(arr,mid);
}
if(mid >= 0){
searchLeftNumber.searchrightnumber(arr,mid);
}
}
}
输出
所查找数值9,在数组下标17的位置
数值9在数组中最左侧的位置是:14
数值9在数组中最左侧的位置是:18