题目
{1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000.
代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr={1,8,10,89,1000,1000,1234};
System.out.println(search(arr,0,arr.length-1,1000));
}
/**
* 假设arr为从小到大排序的数组
* @param arr
* @param left
* @param right
* @param data
* @return
*/
public static List<Integer> search(int[] arr, int left,int right,int data){
int mid1;
int mid=(left+right)/2;
List<Integer> list=new ArrayList<>();
if(left>right) return list;
if(data<arr[mid]){
return search(arr,left,mid-1,data);
}else if(data==arr[mid]){
mid1=mid-1;
while (mid1 >= 0 && arr[mid1] == data) {
list.add(mid1);
mid1 -= 1;
}
list.add(mid);
mid1=mid+1;
while (mid1 <= arr.length - 1 && arr[mid1] == data) {
list.add(mid1);
mid1 -= 1;
}
return list;
}else{
return search(arr,mid+1,right,data);
}
}
运行结果