JavaScript 实现三数之和最接近目标值算法
以下是 JavaScript 实现代码:
function threeSumClosest(nums, target) {
nums.sort((a, b) => a - b); // 先将数组排序
let closestSum = nums[0] + nums[1] + nums[2]; // 初始化最接近的和
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1, right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (Math.abs(sum - target) < Math.abs(closestSum - target)) { // 更新最接近的和
closestSum = sum;
}
if (sum === target) { // 如果三个数的和刚好等于目标值,直接返回
return target;
} else if (sum < target) { // 如果三个数的和小于目标值,将左指针右移
left++;
} else { // 如果三个数的和大于目标值,将右指针左移
right--;
}
}
}
return closestSum;
}
该算法首先对数组进行排序,然后使用双指针法遍历数组。外层循环遍历数组,内层循环使用双指针找到两个数,使得三个数的和最接近目标值。如果三个数的和刚好等于目标值,则直接返回目标值。否则,根据三个数的和与目标值的大小关系移动双指针。
这个算法的时间复杂度为 O(n^2),其中 n 为数组的长度。排序的时间复杂度为 O(nlogn),外层循环的时间复杂度为 O(n),内层循环的时间复杂度为 O(n),所以总的时间复杂度为 O(n^2)。算法的空间复杂度为 O(1),因为只使用了常数个变量来保存最接近的和和三个数的和。
原文地址: https://www.cveoy.top/t/topic/mkZh 著作权归作者所有。请勿转载和采集!