15. 3Sum
Description
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.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
我的代码
class Solution:
def threeSum(self,nums):
res = []
nums.sort()
l = len(nums)
for i in range(0,l-2):
left = i+1
right = l-1
if i>0 and nums[i]==nums[i-1]:
continue
while left<right:
s = nums[i]+nums[left]+nums[right]
if s>0:
right -= 1
else:
if s<0:
left += 1
else:
res.append([nums[i],nums[left],nums[right]])
while left<right and nums[right-1] == nums[right]:
right -= 1
if right>=left:
break
while left<right and nums[left+1] == nums[left]:
left += 1
right -= 1
left += 1
return res
思路:
一开始是用[Lintcode] 59. 3Sum Closest的方法,即固定中间元素找两头的元素,这样重复的元素极难排除。所以选择固定左边。这样只需要跳过重复元素即可。
- 时间复杂度: O(n*n)
- 出错:思路一开始跑偏花了很多时间。