📅  最后修改于: 2023-12-03 15:27:34.374000             🧑  作者: Mango
在这个问题中,我们需要在一个已排序的数组中查找一对数,使它们的和最接近给定的数字x。这是一道经典的问题,可以使用两个指针来解决。
以下是JavaScript的实现代码:
function findClosestPair(arr, x) {
let left = 0;
let right = arr.length - 1;
let closestPair = [arr[left], arr[right]];
let closestDiff = Math.abs(x - (arr[left] + arr[right]));
while (left < right) {
const sum = arr[left] + arr[right];
const diff = Math.abs(x - sum);
if (diff < closestDiff) {
closestPair = [arr[left], arr[right]];
closestDiff = diff;
}
if (sum === x) {
return closestPair;
} else if (sum < x) {
left++;
} else {
right--;
}
}
return closestPair;
}
const arr = [-3, -2, 0, 1, 3];
const x = 1;
console.log(findClosestPair(arr, x)); // 输出 [-2, 3]
这个算法的时间复杂度是O(n),其中n是数组的长度。由于我们每次迭代时只移动了一个指针,因此空间复杂度是O(1)。