题解最接近的三数之和(双指针)

最接近的三数之和-16

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

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示:

3 <= nums.length <= 10^3 -10^3 <= nums[i] <= 10^3 -10^4 <= target <= 10^4

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/3s…

时间复杂度: O(nlogn+n2)排序+双指针

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
 var threeSumClosest = function(nums, target) {
     nums=nums.sort((a,b) => a-b);// 先升序排序 此为解题的前置条件
     let left, right;
     let diff,min=99999;
     let result;
     for(let i=0; i<nums.length-2; i++){// 从左往右依次尝试定一个基础指针 右边至少再保留两位 否则无法凑成3个
        let basic=nums[i];
        right =nums.length-1;// 右指针先从数组最后一项开始尝试
        left =i+1;// 左指针先从 i 右侧的第一位开始尝试
        let sum;
        while(left < right){
            sum=nums[left] + nums[right] + basic;
            diff=Math.abs(sum-target);
            if(diff<min){
                min=diff;
                result=sum;//更新最小查与更新sum
            }
            if(sum<target){
                left++;
            }
            else if(sum>target){// 相等的话 差就为0 一定是答案
                right--;
            }
            else return sum;
        }
        
     }
     return result;


};
阅读剩余
THE END