Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
与3SUM不同的是 不一定是有与target匹配的值 而是要寻找最接近的 显然要全部遍历 与3sum思想差不多 将火速组排序后 先枚举第一个数 然后在它后面的区间里 用头尾指针确定剩余两数 代码如下:
public class Solution {
public int threeSumClosest(int[] num, int target) {
if(num.length<=2)return 0;
int res=0;
Arrays.sort(num);
boolean flag=true;
for(int i=0;i<num.length-2;i++){
int left=i+1;
int right=num.length-1;
while(left<right){
int sum=num[left]+num[right]+num[i];
if(flag==true){
res=sum;
flag=false;
}
else{
if(Math.abs(sum-target)<Math.abs(res-target)){
res=sum;
}
}
if(sum<target){
left++;
}
if(sum>target){
right--;
}
if(sum==target){
return target;
}
}
}
return res;
}
}