前言
找到 K 个最接近的元素
给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。
整数 a 比整数 b 更接近 x 需要满足:
|a - x| < |b - x| 或者
|a - x| == |b - x| 且 a < b
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-k-closest-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* 二分法解题思路:
* 最靠近 x 的 k 个数一定是相邻的,有序的,只需找到左侧边界下标,即可求得
* @param {number[]} arr
* @param {number} k
* @param {number} x
* @return {number[]}
*/
var findClosestElements = function(arr, k, x) {
let left = 0, right = arr.length - k, res = []
while (left < right) {
const mid = Math.floor(left + (right - left) / 2)
if (x - arr[mid] > arr[mid + k] - x) {
left = mid + 1
} else {
right = mid
}
}
for (let i = right; i < right + k; i++) {
res.push(arr[i])
}
return res
};
图解如下
总结
没有思路时,画图寻思路