Use the same two pointers approach as the 3Sum quiz.
Time Complexity : O ( N * LogN + N ** 2 )
Space Complexity: O ( log N ) or O ( N ), depending on the sort algorithm.
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
N = len(nums)
result = nums[0] + nums[1] + nums[2] # assume the init value of result
for i in range(N-2):
if i > 0 and nums[i] == nums[i-1]:
continue
left, right = i + 1, N-1
while left < right:
tmp = sum([nums[i], nums[left], nums[right]])
if abs(result - target) > abs(tmp - target):
result = tmp
if tmp == target:
return target
if tmp < target:
j = left + 1
while j < right and nums[j] == nums[left]:
j += 1
left = j
else:
k = right - 1
while k > left and nums[k] == nums[right]:
k -= 1
right = k
return result
Edited of 07/27/2021. Update result variable's init value.
No comments:
Post a Comment