658. 找到 K 个最接近的元素

给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。

示例 1:
输入: [1,2,3,4,5], k=4, x=3
输出: [1,2,3,4]

示例 2:
输入: [1,2,3,4,5], k=4, x=-1
输出: [1,2,3,4]

题解

/**
 * @param {number[]} arr
 * @param {number} k
 * @param {number} x
 * @return {number[]}
 */
var findClosestElements = function(arr, k, x) {
    let i =arr.length - 1
    while (i>0) {
        if (arr[i] > x && arr[i] - x >= x - arr[0] && arr.length > k) {
            arr.pop()
        }
        if (x > arr[0] && x - arr[0] > arr[i] - x && arr.length > k) {
            arr.shift()
        }
        if (arr.length == k) {
            return arr
        }
        i--
    }
    return arr
};