题目
给你一个长度为 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
提示:
3 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
-10^4 <= target <= 10^4
解题
方法一:排序 双指针
思路
与【排序, 双指针】三数之和几乎相同,唯一不同的点是这次只需要找到最接近 target
的和,所以维护一个 closest
每次移动指针后更新即可。
代码
class Solution {
public int threeSumClosest(int[] nums, int target) {
int n = nums.length;
Arrays.sort(nums);
int closest = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; ++i) {
int a = nums[i];
int left = i + 1, right = n - 1;
while (left < right) {
int curr = a + nums[left] + nums[right];
if (Math.abs(curr - target) < Math.abs(closest - target))
closest = curr;
if (curr > target) --right;
else if (curr < target) ++left;
else return target;
}
}
return closest;
}
}
评论区