题目:
给你一个长度为 n 的整数数组 nums **和 一个目标值 target。请你从 nums **中选出三个在 不同下标位置 的整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
思路:
代码:
var threeSumClosest = function (nums, target) {
//先排个序,再用相向双指针
nums.sort((a, b) => a - b);
let len = nums.length;
//初始值赋值前三位,防止数组只有三个元素
let res = nums[0] + nums[1] + nums[2];
//初始值
let minDiff = Math.abs(res - target);
//外层依旧for循环
for (let i = 0; i < len; i++) {
const x = nums[i];
let l = i + 1;
let r = len - 1;
while (l < r) {
const sum = x + nums[l] + nums[r];
//小于diff,就说明,这次离得更近
let diff = Math.abs(sum - target)
//更新res和最小差值
if (chaa < cha){
res = sum;
minDiff = diff;
}
//处理下一轮
if (sum > target) {
r--;
} else if (sum < target) {
l++;
}else {
//如果sum === target的话,肯定最小的了,直接返回target就好了
return target;
}
}
}
return res;
};