# 最接近的三数之和

  1. 最接近的三数之和

来源:力扣(LeetCode) 链接 (opens new window):https://leetcode.cn/problems/3sum-closest/submissions/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

github (opens new window)

# 问题

给你一个长度为 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;
};
陕ICP备20004732号-3