classSolution{publicList<Integer>findClosestElements(int[] arr,int k,int x){List<Integer> ret =Arrays.stream(arr).boxed().collect(Collectors.toList());int n = ret.size();//如果x <=首元素,则返回前k个元素if(x <= ret.get(0)){return ret.subList(0, k);// //如果x >= 尾元素,则返回后k个元素}elseif(x >= ret.get(n-1)){return ret.subList(n - k, n);//x介于arr[0]和arr【n-】}else{//如果x在数组中,返回下标,否则返回-(插入键)-1,插入键为大于key的第一个元素int index =Collections.binarySearch(ret, x);//此时index= -(大于x的第一个数) - 1if(index <0){//返回大于x的第一个数
index =-index -1;}//index - k - 1int low =Math.max(0, index - k );int high =Math.min(n -1, index + k -1);while(high - low > k -1){if(ret.get(high)- x < x - ret.get(low)){
low ++;}else{
high--;}}return ret.subList(low, high +1);}}}