双指针
import java.util.Arrays;
class Solution {
public int threeSumClosest(int[] nums, int target) {
/**
* 类似于《15. 三数之和》
*/
int min = Integer.MAX_VALUE;
int res = 0;
Arrays.sort(nums);
for (int i = 0; i <= nums.length - 3; i++) {
if (i > 0 && nums[i] == nums[i - 1]){
continue;
}
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
int abs = Math.abs(sum - target);
if (abs < min) {
min = abs;
res = sum;
}
if (sum > target) {
right--;
} else if (sum < target) {
left++;
} else {
return sum;
}
}
}
return res;
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/3sum-closest/