問題描述
給定一個包括 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)
解法一
解題思路: 我們可以使用雙指針的方法來解決這個問題。首先對數組進行排序,然後遍歷數組,對於每個元素,使用兩個指針分別指向其後的第一個元素和最後一個元素,通過移動這兩個指針來尋找和最接近 target 的三個數。
/*
* @lc app=leetcode.cn id=16 lang=javascript
*
* [16] 3Sum Closest
*/
// @lc code=start
function threeSumClosest(nums, target) {
nums.sort((a, b) => a - b);
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1, right = nums.length - 1;
while (left < right) {
let sum = nums[i] + nums[left] + nums[right];
if (Math.abs(target - sum) < Math.abs(target - closestSum)) {
closestSum = sum;
}
if (sum > target) {
right--;
} else if (sum < target) {
left++;
} else {
return sum;
}
}
}
return closestSum;
}
// @lc code=end