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; 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) {
left++;
} else if (sum > target) {
right--;
} else {
return target; // 如果三个数之和等于目标值,则直接返回
}
}
}
return closestSum;
}
时间复杂度为 $O(n^2)$,其中排序时间复杂度为 $O(n\log n)$,双指针扫描时间复杂度为 $O(n)$。
原文地址: https://www.cveoy.top/t/topic/mkZ0 著作权归作者所有。请勿转载和采集!