跟3sum一样,记录绝对查值最小的值就行,
定位i,j=i+1,k=n-1, tmp为三个数之和
如果比target大,k--
如果比target小,j++
public class Solution {
public int threeSumClosest(int[] num, int target) {int i,j,k;
int tmp,close;
int n=num.length;
Arrays.sort(num);
close=num[0]+num[1]+num[2];
for(i=0;i<n-2;i++)
{
j=i+1;k=n-1;
if(Math.abs(num[i]+num[j]+num[k]-target)<Math.abs(target-close))
close=num[i]+num[j]+num[k];
//System.out.println(close+" "+i+" "+j+" "+k);
while(j<k)
{
tmp=num[i]+num[j]+num[k];
if(Math.abs(tmp-target)<Math.abs(close-target))
close=tmp;
//System.out.println(close+" "+num[i]+" "+num[j]+" "+num[k]);
if(tmp==target)
return target;
else if(tmp>target)
k--;
else
j++;
}
}
return close;
}
}