16. 最接近的三数之和 3Sum Closest
Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
方法和15题三数之和类似
也是利用双指针法
public int threeSumClosest(int[] nums, int target) { int n = nums.length; Arrays.sort(nums); int min = Integer.MAX_VALUE; int sum = 0; for (int first = 0; first < n; first++) { if (first > 1 && nums[first] == nums[first - 1]) { continue; } int dst = target - nums[first]; int third = n - 1; for (int second = first + 1; second < n; ) { if (nums[second] + nums[third] + dst > target && second < third) { if (min > Math.abs(nums[second] + nums[third] - dst)) { min = Math.abs(nums[second] + nums[third] - dst); sum = nums[second] + nums[third] + nums[first]; } third--; } else if (nums[second] + nums[third] == dst) { return target; } else { if (min > Math.abs(nums[second] + nums[third] - dst)) { min = Math.abs(nums[second] + nums[third] - dst); sum = nums[second] + nums[third] + nums[first]; } second++; } } } return sum; }
参考链接:
https://leetcode.com/problems/3sum-closest/
https://leetcode-cn.com/problems/3sum-closest