public class Demo {
public static void main(String[] args) {
int[] arr={1,5,22,22,22,88,2032,5823};
List<Integer> sort = sort(arr, 0, arr.length, 22);
System.out.println(sort);
}
public static List<Integer> sort(int[] arr,int left,int right,int findValue){
//取出中间的索引
int mid=(left+right)/2;
//找到中间的值
int midVal=arr[mid];
//如果查找的值不存在,当往右查找时,到数组最大索引还没找到,结束递归,返回-1
if(left>right){
return new ArrayList<>();
}
//如果要查找的数大于mid往右边递归
if(findValue>midVal){
return sort(arr,mid+1,right,findValue);
}else if(findValue<midVal){
//如果要找的数小于中间的数往左递归
return sort(arr,left,mid-1,findValue);
}else {
//找到,返回查找的值,有重复数据,往左右扫描
//往左扫描
int temp=mid-1;
List<Integer> resultIndexs = new ArrayList<>();
while (true){
if(temp<0||arr[temp]!=findValue){//退出
break;
}
resultIndexs.add(temp);
temp-=1;
}
resultIndexs.add(mid) ;
temp=mid+1;
while (true){
if(temp>arr.length-1||arr[temp]!=findValue){//退出
break;
}
resultIndexs.add(temp);
temp+=1;
}
return resultIndexs;
}
}
}