3Sum Closest
Description
Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1.The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
Solution(javascript)
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
nums = nums.sort(function(a, b) {
return a - b;
});
var rtn = nums.slice(0, 3).reduce((sum, a) => sum + a,0);
var dif = Math.abs(rtn - target);
for (var i = 0; i < nums.length - 2; i++) {
for (var j = i + 1, k = nums.length - 1; j < k;) {
var sum = nums[i] + nums[j] + nums[k];
if (sum - target === 0) {
return target;
} else if (Math.abs(sum - target) < dif) {
dif = Math.abs(sum - target);
rtn = sum;
}
if (nums[i] + nums[j] + nums[k] - target > 0) {
k--;
} else {
j++;
}
}
}
return rtn;
};