Given a sorted integer array arr, two integers k and x, return the k closest integers to x in the array. The result should also be sorted in ascending order. An integer a is closer to x than an integer b if:


Test Cases

Example 1:

Input: arr = [1,2,3,4,5], k = 4, x = 3 Output: [1,2,3,4]

Example 2:

Input: arr = [1,1,2,3,4,5], k = 4, x = -1 Output: [1,1,2,3]

Constraints:


Solution

class Solution {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        int l = 0, r = arr.length - 1;
        while(r - l >= k) {
            if (Math.abs(arr[l] - x) > Math.abs(arr[r] - x)) {
                l++;
            } else {
                r--;
            }
        }
        List<Integer> result = new ArrayList<>();
        for(int i=l; i<=r; i++) {
            result.add(arr[i]);
        }
        return result;
    }
}
class Solution:
    def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
        left, right = 0, len(arr)-1
        while right - left  >= k:
            if abs(x - arr[left]) > abs(arr[right] - x):
                left += 1
            else:
                right -= 1
        return arr[left: right+1]
Time Complexity: O(n)
Space Complexity: O(1)