Problem: 15. 三数之和
思路
首先会想到参考两数之和的哈希表方式,解到后面发现去重特别难处理。
考虑到不需要标记元素的下标,将原数组进行排序后可以通过双指针的方式解决。
Code
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums=sorted(nums)
n = len(nums)
if n < 3 :
return []
r = n -1
res = []
for i in range(n-2):
cur,l,r = nums[i],i+1,n -1
if res !=[] and res[-1][0] == cur:
continue
while l < r:
if cur + nums[l] +nums[r] == 0:
res.append([cur,nums[l],nums[r]])
while l < r-1 and nums[l] == nums[l+1]:
l += 1
while r > l +1 and nums[r] == nums[r-1]:
r -=1
if cur + nums[l] + nums[r] > 0:
r -= 1
else :
l += 1
return res