public static ArrayList<Integer> binarySearch(int[] arr,int left,int right,int findVal){
//找不到时返回空数组
if(left > right) return new ArrayList<>();
//定义数组中间指针
int mid = (left + right) / 2;
if(arr[mid] > findVal){ //如果目标数小于中间值,向左递归
return binarySearch(arr, left, mid - 1, findVal);
}else if(arr[mid] < findVal){ //如果目标书大于中间值,向右递归
return binarySearch(arr, mid + 1, right,findVal);
}else {
//找到目标数的下标
//定义要返回的数组
ArrayList<Integer> resultList = new ArrayList<>();
//向数组中添加刚找到的下标
resultList.add(mid);
//向左寻找是否有相同的值,如果有,则在数组中添加该下表
while (mid - 1 >= 0 && arr[mid - 1] == findVal){
resultList.add(mid - 1);
mid--;
}
//向右寻找是否有相同的值,如果有,则在数组中添加该下表
while (mid + 1 <= arr.length - 1 && arr[mid + 1] == findVal){
resultList.add(mid + 1);
mid++;
}
//返回结果数组
return resultList;
}
}