题目:
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums); //数组排序
int min = Integer.MAX_VALUE; //整数最大值
int ans = 0;
int len = nums.length;
for (int i = 0; i < len; i++) {
if (i > 0 && nums[i] == nums[i - 1]) { // 第一个不相等的数
continue;
}
int start = i + 1; // 左边界指针
int end = len - 1; // 右边界指针
while (start < end) {
int value = nums[i] + nums[start] + nums[end];
if (value == target) { // 如果相等,则最接近直接返回即可
return value;
}
if (Math.abs(value - target) < min) {
min = Math.abs(value - target);
ans = value; //更新最接近的值
}
if (value > target) { // 如果和大于目标值,则右指针减小
end--;
} else {
start++; // 如果和小于目标值,则右指针变大
}
}
}
return ans;
}
}
参考解析:双指针