最接近的三数之和
题目描述
给你一个长度为 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的值。
代码
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int len = nums.length;
int sum = nums[0] + nums[1] + nums[2];
for(int i = 0;i < len - 2;i++) {
int l = i+1,r = len-1;
while(r > l) {
int temp = nums[i] + nums[r] + nums[l];
if(sum == target)
return sum;
else {
if(Math.abs(sum - target) > Math.abs(temp - target)) {
sum = temp;
}else if(temp < target) {
l++;
}else{
r--;
}
}
}
}
return sum;
}
}