可以使用双指针法来解决这个问题。首先将数组排序,然后固定第一个数,使用双指针分别从左和右开始扫描数组,寻找最接近目标值的三个数之和。

具体实现如下:

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)$。

JavaScript 实现三数之和最接近目标值

原文地址: https://www.cveoy.top/t/topic/mkZ0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录