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.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1.The sum that is closest to the target is 2. (-1 + 2 + 1 = 2). 这题要求找出三个数的和跟target最接近的,可以跟之前的三数之和类似的方法来处理,同样先确定一个数后再对剩下的两个数使用双指针法 每次根据结果与target的比较结果判断移动头指针还是尾指针,这里注意结果大于target也可能小于target所以要做绝对值的判断
class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int closestNum = nums[0] + nums[1] + nums[2]; for (int i = 0; i < nums.length - 2; i++) { int l = i + 1, r = nums.length - 1; while (l < r){ int threeSum = nums[l] + nums[r] + nums[i]; if (Math.abs(threeSum - target) < Math.abs(closestNum - target)) { closestNum = threeSum; } if (threeSum > target) { r--; } else if (threeSum < target) { l++; } else { return target; } } } return closestNum; }}