leetCode第七题

95 阅读1分钟

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。


/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    // 这里一定要设置Infinity  不可以设置为0  因为无法确定target的大小
    let res = Infinity;
    // // 1. 排序预处理
    nums.sort((a,b)=>a-b);
    for(let i = 0; i < nums.length; i++){
        let l = i+1;
        let r = nums.length - 1;
        while(l < r){
            let num = nums[l] + nums[i] + nums[r];
            if(Math.abs(num - target) < Math.abs(res - target)){
                res = num;
            }
            if(num > target){
                r--;
            }
            if(num < target){
                l++;
            }
            if(num === target){
                return num
            }
        }
    }
    return res
};