讨论/《二分查找》 - 找到 K 个最接近的元素/
《二分查找》 - 找到 K 个最接近的元素

其实这个题放到【模板2】里更合适,直接寻找左边界即可:

function findClosestElements(arr: number[], k: number, x: number): number[] {
    // 左边界的起始终止点
    let left = 0;
    let right = arr.length - k;

    while (left < right) {
        let mid = (left + right) >>> 1;
        if (x - arr[mid] > arr[mid + k] - x) {
            // 如果左边界点与x的差值 > 右边界点与x的差值 —> 向右侧靠近
            left = mid + 1;
        } else {
            right = mid;
        }
    }

    return arr.slice(left, left + k);
};
4
展开全部 7 讨论