16. 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

题解

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    nums=nums.sort((a,b)=>a-b)
    let add=nums[0]+nums[1]+nums[2]
    for(let i=0;i<nums.length-2;i++){
        if(nums[i]==nums[i-1]){
            i++
        }
        let j=i+1,k=nums.length-1
        while (j<k){
            let temp=nums[i]+nums[j]+nums[k]
            if(temp==target){
                return temp
            }else if(Math.abs(target-add)>Math.abs(target-temp)){
                add=temp
            }
            if(nums[j]==nums[j-1]){
                j++
            }
            if(nums[k]==nums[k+1]){
                k--
            }
            if(temp<target){
                j++
            }
            if(temp>target){
                k--
            }
        }
    }
    return add
};