Find K Closest Elements

class Solution {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        List<Integer> result = new ArrayList<>(k);
        int position = Arrays.binarySearch(arr, x);
        int left;
        int right;
        if(position < 0){
            position = -position - 1;
            left = position - 1;
            right = position;
        }
        else{
            left = position - 1;
            right = position + 1;
        }
        
        while(right - left - 1 != k){
            if(left < 0){
                right ++;
            }
            else if(right > arr.length - 1){
                left --;
            }
            else if(arr[right] - x < x - arr[left]){
                right ++;
            }else{
                left --;
            }
        }
        
        for(int i = 0; i < k; i ++){
            result.add(arr[left + i + 1]);
        }
        return result;
    }
}

最后更新于

这有帮助吗?