- 例子:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
- 要点:
- 二分法使用的条件是有序
- 二分法使用时,注意溢出问题
- 要记得二分法有去重优化
class Solution {
// 二分法的使用前提是排序
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int min = Integer.MAX_VALUE;
int ans = 0;
if (nums == null || nums.length == 0) return 0;
for (int i = 0; i < nums.length; i++) {
if (i > 0 && nums[i-1] == nums[i]) continue;
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int value = nums[i] + nums[left] + nums[right];
if (value == target) return value;
if (Math.abs(value - target) < min) {
min = Math.abs(value - target);
ans = value;
}
if (value < target) {
left++;
while (left < right && nums[left-1] == nums[left]) left++;
} else if (value > target) {
right--;
while (left < right && nums[right+1] == nums[right]) right--;
}
}
}
return ans;
}
}