Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
- 题目大意
与上一道题基本一样,只不过这回是找到3个数,使他们的和与给定的target最为相近。
算法上与上一题类似,只不过我们不再需要去掉重复的数字
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
nums.sort((a, b) => a - b);
let result = Number.MAX_VALUE;
for (let i = 0; i < nums.length - 2; i++) {
let j = i + 1;
let k = nums.length - 1;
while (j < k) {
let sum=nums[i]+nums[j]+nums[k];
if (Math.abs(result-target)>Math.abs(sum-target)) { //判断是否相近
result = sum;
if (result === target) return result; //当找到3个数的和与target相同时 直接退出
}
if (sum>target) k--;
else
j++;
}
}
return result;
};