public List<Integer> findClosestElements2(int[] arr, int k, int x) {
int right = binary(arr,x);
int left = right - 1;
while (k-- > 0){
if (left < 0){
right++;
} else if (right >= arr.length ){
left--;
} else if (x - arr[left] <= arr[right] - x){
left--;
} else {
right++;
}
}
List<Integer> list = new ArrayList<>();
for (int i = left + 1; i < right; i++){
list.add(arr[i]);
}
return list;
}
private int binary(int[] arr, int x){
int left = 0, right = arr.length - 1;
while (left < right){
int mid = (left + right) >> 1;
// 如果中位数大于x
if (arr[mid] >= x){
right = mid;
}else { // 如果中位数小于x
left = mid + 1;
}
}
return left;
}