排序+双指针
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int best = 100000000;
for(int i = 0; i < nums.length; i++) {
if(i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int L = i + 1;
int R = nums.length - 1;
while(L < R) {
int sum = nums[i] + nums[L] + nums[R];
if(sum == target) {
return sum;
}
//更新答案
if(Math.abs(sum - target) < Math.abs(best - target)) {
best = sum;
}
if(sum > target) {
//移动的时候先去重
while(L < R && nums[R] == nums[R - 1]) {
R--;
}
R--;
}else {
//移动的时候先去重
while(L < R && nums[L] == nums[L + 1]) {
L++;
}
L++;
}
}
}
return best;
}
}