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).
The subject with [LeetCode] 15. 3Sum_Medium tag: Array is very similar, but target, and then to the closest, they still use two pointers to get after each pair num, so that their sum closest to the target, and then take all sum closest 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, year = localDif, total return years