AC代碼
排序+雙指針
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int bestNum = nums[0] + nums[1] + nums[2];
for (int i = 0;i < nums.length -2;i++) {
int l = i + 1;
int r = nums.length - 1;
while (l < r) {
while(i >= l || l > r) l++;
if (Math.abs(bestNum - target) > Math.abs(nums[i] + nums[r] + nums[l] - target))
bestNum = nums[i] + nums[r] + nums[l];
int tmp = nums[i] + nums[r] + nums[l] - target;
//選擇最優的
if (tmp > 0) {
r--;
} else if (tmp < 0){
l++;
} else {
bestNum = nums[i] + nums[r] + nums[l];
break;
}
}
}
return bestNum;
}