题目:16. 最接近的三数之和
思路:双指针。
与15题思路一致,修改判断结果条件即可。
代码:
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = Integer.MAX_VALUE;
int min = Integer.MAX_VALUE;
for (int cur = 0; cur < nums.length; cur++) {
if (cur - 1 >= 0 && nums[cur] == nums[cur - 1]) {
continue;
}
int left = cur + 1;
int right = nums.length - 1;
while (left < right) {
if (Math.abs(nums[cur] + nums[left] + nums[right] - target) < min) {
res = nums[cur] + nums[left] + nums[right];
min = Math.abs(nums[cur] + nums[left] + nums[right] - target);
}
if (nums[cur] + nums[left] + nums[right] == target) {
return target;
}
else if (nums[cur] + nums[left] + nums[right] > target) {
right --;
}
else {
left ++;
}
}
}
return res;
}
}