Skip to content
On this page

16. 最接近的三数之和

原题链接:LeetCode 16. 最接近的三数之和

题目描述

给你一个长度为 n 的整数数组 nums* 和 一个目标值 target。请你从 nums *中选出三个在 不同下标位置 的整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

**输入:**nums = [-1,2,1,-4], target = 1 **输出:**2 **解释:**与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。

示例 2:

**输入:**nums = [0,0,0], target = 1 **输出:**0 **解释:**与 target 最接近的和是 0(0 + 0 + 0 = 0)。

提示:

- `3 <= nums.length <= 1000`

- `-1000 <= nums[i] <= 1000`

-104 <= target <= 104

难度: Medium


题解代码

javascript
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
 var threeSumClosest = function(nums, target) {
  nums.sort((m, n) => m - n)
  const len = nums.length
  let min = Infinity
  for (let i = 0; i < len; i++) {
      if (i > 0 && nums[i] === nums[i - 1]) continue

      let left = i + 1
      let right = len - 1

      while (left < right) {
          const sum = nums[i] + nums[left] + nums[right]
          if (sum === target) {
              return target
          }
          min = Math.abs(sum - target) > Math.abs(min - target) ? min : sum
          if (sum < target) {
            while(left < right && nums[left] === nums[left + 1]) left++
            left++
          } else {
            while(left < right && nums[right] === nums[right - 1]) right--
            right--
          }
      }
  }
  return min
};

技术文档集合