Modifique a pesquisa binária para habilitar a pesquisa de intervalo. A chamada pesquisa de intervalo é para encontrar todos os elementos entre um determinado valor a e b (a <= b).
Idéia:
O objetivo final da pesquisa de meio loop é fazer a <= arr [mid] <= b e, em seguida, produzir o valor que atende à condição por meio do loop for.
public static void slove(int[] arr,int a,int b) {
Arrays.sort(arr);
System.out.println("排序后的数组:");
for(int k : arr) {
System.out.print(k+" ");
}
System.out.println();
System.out.println("===========\n待查区间:["+a+","+b+"]");
// 查找
int mid = 0;
int low = 0;
int high = arr.length - 1;
while(low <= high) {
mid = (low+high)/2;
if(arr[mid] < a) {
// arr[mid]不在[a,b]中,继续移动low指针
low = mid + 1;
}else if(arr[mid] > b) {
// arr[mid]不在[a,b]中,继续移动high指针
high = mid - 1;
}else {
// arr[mid]在[a,b]中,通过遍历判断取[a,b]中的值
System.out.println("===========\n最终结果:");
for (int i = low; i<=mid; i++) {
if (arr[i]>=a) {
System.out.print(arr[i]+" ");
}
}
for(int i=mid+1; arr[i]<=b; i++) {
System.out.print(arr[i]+" ");
}
return ; // 跳出
}
}
}