问题描述
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
注意:The solution set must not contain duplicate triplets.
例子
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
2019_6_02
思路:
1.先排序,左右有重复值略过。
2.双指针指向左右两侧的值,计算当前三个点的和。
3.大于0则,right左移;小于0则eft右移。
nums.sort()
# print(nums)
res = []
for i in range(len(nums)):
if i>0 and nums[i]==nums[i-1]:
continue
left,right = i+1,len(nums)-1
while(left<right):
limit = nums[i]+nums[left]+nums[right]
if limit<0:
left = left+1
elif limit>0:
right = right-1
else:
res.append((nums[i], nums[left], nums[right]))
while(left<right) and nums[left]== nums[left+1]:
left = left + 1
while(left<right) and nums[right]==nums[right-1]:
right = right-1
right = right-1
left = left+1
# print(res)
return res
N1 = Solution()
NUM = [-1,0,1,2,-1,-4]
N1.threeSum(NUM)
analysis
Runtime: 680 ms, faster than 75.41% of Python online submissions for 3Sum.
Memory Usage: 14.7 MB, less than 91.05% of Python online submissions for 3Sum.