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).
这个题目跟[LeetCode] 15. 3Sum_Medium tag: Array很类似,但是有target,然后要最接近的,所以还是用two pointers去得到每个num 之后的pair,使得他们的sum最接近target,然后取所有sum中最接近的sum.
class Solution: def 3sumClosest(self, nums, target): ans, dif, n = None, None, len(nums) nums.sort() for i in range(n - 2): total = nums[i] + self.helper(nums, i + 1, n - 1, target - nums[i]) localDif = abs(total - target) if dif is None or localDif < dif: dif, ans = localDif, total return ans def helper(self, nums, start, end, target): ans, dif = None, None while start < end: total = nums[start] + nums[end] if total == target: return total elif total < target: localDif = target - total start += 1 elif total > target: localDif = total - target end -= 1 if dif is None or localDif < dif: dif, ans = localDif, total return ans