给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
Given an integer array nums of length n and an integer target, find three integers in nums such that the sum is closest to target.
Return the sum of the three integers.
You may assume that each input would have exactly one solution.
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
这个题目可以不用将重复值特殊对待,因为求的是三个数之和最接近目标值
var threeSumClosest = function (nums, target) {
nums.sort((a, b) => { return a - b })
let len = nums.length
let res = nums[0] + nums[1] + nums[2]
for (let i = 0; i < len; i++) {
let l = i + 1
let r = len - 1
while (l < r) {
let sum = nums[i] + nums[l] + nums[r]
if (Math.abs(sum - target) < Math.abs(res - target)) {
res = sum
}
if (sum < target) {
l++
} else if (sum > target) {
r--
} else {
return res
}
}
}
return res
};