LeetCode 15
3sum的问题,如果先确定一个数,那么我们就可以转为2sum的问题。根据这个思路,我们先排序数组,然后确定一个数,然后就在剩下的数组中寻找2sum的答案。
要注意的一点是,如果有相同的数已经处理过了,我们可以跳过
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
n = len(nums)
result = []
for i in range(n):
if i > 0 and nums[i] == nums[i-1]: continue
target = - nums[i]
start, end = i+1, n-1
while start < end:
if nums[start] + nums[end] < target:
start +=1
while nums[start] == nums[start-1]:
start+=1
elif nums[start] + nums[end] > target:
end -=1
while nums[end] == nums[end+1]:
end -=1
else:
result.append([nums[i], nums[start], nums[end]])
start+=1
end -=1
while nums[start] == nums[start-1]:
start+=1
while nums[end] == nums[end+1]:
end -=1
return result