leet 16最接近的三数之和

    技术2022-07-10  87

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

    示例:

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

     

    本题同样的双指针法,和计算三个位相加为0一样的思想。

    可以参考:https://blog.csdn.net/qq_20473985/article/details/107049545 javascript:

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

    java:

    class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int result = nums[0] + nums[1] + nums[2]; for(int i = 0; i < nums.length - 2; i++){ int left = i + 1; int right = nums.length - 1; while(left < right){ int sum = nums[i] + nums[left] + nums[right]; if(Math.abs(sum - target) < Math.abs(result - target)){ result = sum; } if(sum > target){ right --; }else if(sum < target){ left ++; }else{ return sum; } } } return result; } }

     

    Processed: 0.012, SQL: 9