leetcode16最接近的三数之和

描述

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
双指针
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int closestNum = nums[0]+nums[1]+nums[2];

for(int i = 0;i<nums.length-2;i++)
{
int l=i+1,r = nums.length-1;
while(l<r)
{
int threeSum = nums[l]+nums[r]+nums[i];
if(Math.abs(threeSum-target) < Math.abs(closestNum-target))
{
closestNum=threeSum;
}
if(threeSum>target)
{
r--;
}
else if(threeSum<target)
{
l++;
}
else{
//如果已经等于target,肯定是最接近的
return target;
}
}
}
return closestNum;
}
}