题目描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入: nums = [-1,2,1,-4], target = 1
输出: 2
解释: 与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
题目分析
这个题目与前一个题目很像 LeetCode15——三数之和(排序+双指针)
只不过这个题目返回的是最接近的一个数,因此多了两个变量,一个是返回的结果,另一个是结果与目标的差值,在遍历数组之后找到差值最小的结果进行返回。
代码
Java代码如下:
class Solution {
public int threeSumClosest(int[] nums,int target)
{
Arrays.sort(nums);
int result =0;
int diff = Integer.MAX_VALUE;
for(int k=0; k < nums.length-2; k++)
{
if(k>0&&nums[k]==nums[k-1])
{
continue;
}
int curTarget=target -nums[k];
int i=k+1;
int j=nums.length-1;
while(i<j)
{
int sum = nums[i]+nums[j];
if(sum==curTarget)
{
return target;
} else
{
int difTarget=Math.abs(curTarget-sum);
if(difTarget<diff)
{
result=sum+nums[k];
diff=difTarget;
}
if(sum>curTarget)
{
j--;
}
else
{
i++;
}
}
}
}
return result;
}
}