16. 最接近的三数之和(JS实现)

1 题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

2 思路

这道题还是利用了排序 + 双指针的方法解决

3代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    if (nums.length <= 3) {
        return nums.reduce(function(prev, curr){
            return prev + curr;
        });
    }
    nums.sort(function(a, b){
        return a-b;
    })

    var left,right;
    var diff = target - nums[0] - nums[1] - nums[2];
    var sum;

    for (var i=0; i<nums.length; i++) {
        left = i + 1;
        right = nums.length - 1;
        while(left < right) {
            sum = nums[i] + nums[left] + nums[right]
            if (Math.abs(diff) > Math.abs(target - sum)) {  //注意这里对比的是绝对值
                diff = target - sum;
            }
            if (diff === 0) return target;  //相加等于target,此时直接返回
            if (target - sum > 0) {
                left++;
            } else {
                right--;
            }
        }
    }

    return target - diff;
};

猜你喜欢

转载自blog.csdn.net/zjw_python/article/details/106453153