这道题和之前的3sum差不多,设置左右标兵left=i+1,right=len-1,这是选择和target最接近的sum,使用 Math.abs来计算,同时设定初始值error,循环遍历,直至找到最小的sum,代码如下:
public static int threeSumClosest(int[] num, int target) {
if (num==null||num.length<3) return 0;
int len=num.length;
Arrays.sort(num);
int res=num[0]+num[1]+num[2];
int error=Math.abs(target-res);
for (int i = 0; i < len-2; i++) {
int left=i+1;
int right=len-1;
while (left<right) {
int sum=num[i]+num[left]+num[right];
if (sum==target) {
return sum;
}
else {
if (Math.abs(sum-target)<error) {
res=sum;
error=Math.abs(sum-target);
}
if (sum>target) {
right--;
}else {
left++;
}
}
}
}
return res;
}