16. *接近的三数之和(JS实现)

1 题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target *接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target *接近的三个数的和为 2. (-1 + 2 + 1 = 2).

2 思路
这道题还是利用了排序 + 双指针的方法解决

3代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
if (nums.length <= 3) {
return nums.reduce(function(prev, curr){
return prev + curr;
});
}
nums.sort(function(a, b){
return a-b;
})

var left,right;
var diff = target – nums[0] – nums[1] – nums[2];
var sum;

for (var i=0; i<nums.length; i++) {
left = i + 1;
right = nums.length – 1;
while(left < right) {
sum = nums[i] + nums[left] + nums[right]
if (Math.abs(diff) > Math.abs(target – sum)) { //注意这里对比的是*对值
diff = target – sum;
}
if (diff === 0) return target; //相加等于target,此时直接返回
if (target – sum > 0) {
left++;
} else {
right–;
}
}
}

return target – diff;
};