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.
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).
Code:
class Solution(object):
def threeSumClosest(self, nums, target):
res = []
nums.sort()
closestDiff = sys.maxsize #9223372036854775807
sign = 1
for i in range(len(nums)-2):
l, r = i+1, len(nums)-1
while l < r:
s = nums[i] + nums[l] + nums[r]
if s == target:
return s
if abs(target - s) < closestDiff:
sign = -1 if target - s < 0 else 1
closestDiff = min(abs(target - s), closestDiff)
if s < target:
l +=1
elif s > target:
r -= 1
return target - (closestDiff * sign)