# 最接近的三数之和
- 最接近的三数之和
来源:力扣(LeetCode) 链接 (opens new window):https://leetcode.cn/problems/3sum-closest/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# 问题
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
# 思路
var threeSumClosest = function (nums, target) {
let n = nums.length;
//先排序
nums.sort((a, b) => a - b);
let min = Infinity;
let res;
for (let i = 0; i < nums.length; i++) {
let basic = nums[i];
let left = i + 1; //左指针 从i右侧的第一位开始尝试
let right = n - 1; //右指针 从数组的最后一位开始尝试
while (left < right) {
let sum = basic + nums[left] + nums[right];
let diff = Math.abs(sum - target);
if (diff < min) {
min = diff;
res = sum;
}
if (sum < target) {
left++;
} else if (sum > target) {
right--;
} else {
return sum;
}
}
}
return res;
};