可以把这道题想象成在一条坐标轴上,求三个数之和到目标的距离的最小值,然后再用target加上或减去距离
public class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int i = 0, j = nums.length;
int sum = 0;
int min = Integer.MAX_VALUE;//相差的距离
int flag = 0;//0说明点在target在左边,1是在右边
for (int k = 0; k < nums.length - 2; k++) {
i = k + 1;
sum = nums[k];
j = nums.length - 1;
while (i < j) {
sum += nums[i] + nums[j];
if (Math.abs(sum - target) < min) {
min = Math.abs(sum - target);
if(sum<target)flag=0;
else{flag = 1;}
}
if (sum < target) {
sum = nums[k];
i++;
} else {
sum = nums[k];
j--;
}
}
}
if(flag==0)return target-min;
return target+min;
}
}