按照三数之和的思路做,结果速度和内存都这么慢…
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
nums = nums.sort((a, b) => a - b);
console.log(nums);
const len = nums.length - 1;
let dis = target - nums[0] - nums[1] - nums[2]; // 初始化
for (let i = 0; i < len - 1; i++) {
let j = i + 1;
let k = len;
while (j < k) {
// 因为每组输入只有唯一答案,所以不用取绝对值
let temp = target - nums[i] - nums[j] - nums[k];
// console.log(nums[i], nums[j], nums[k], temp, dis);
if (temp > 0) {
while(j < len && nums[j] === nums[++j]){};
if (dis > 0) {
dis = Math.min(dis, temp);
}
else {
dis = temp + dis > 0 ? dis : temp;
}
}
else if (temp < 0) {
while(k > 0 && nums[k] === nums[--k]){};
if (dis > 0) {
dis = temp + dis > 0 ? temp : dis;
}
else {
dis = -Math.min(-dis, -temp);
}
}
else {
return target; //最接近的时候 即 相等
}
}
}
return target - dis;
};