import numpy as np
class Solution:
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
# 法一:时间复杂度高
# if(len(nums)<3):
# return []
# nums.sort()
# l=[]
# l1=len(nums)-2
# l2=len(nums)-1
# for i in range(0,l1):
# for j in range(i+1,l2):
# for k in range(j+1,len(nums)):
# if(nums[k]+nums[i]+nums[j]==0):
# l.append((nums[i],nums[j],nums[k]))
# reList = list(set([tuple(t) for t in l]))
# reList = [list(v) for v in reList]
# #print(reList)
# return reList
#法二:指针
if(len(nums)<3):
return []
nums.sort()
#print(nums)
l=[]
for i in range(0,len(nums)-2):
if(nums[i]*3>0):
break
if(i!=0 and nums[i]==nums[i-1]):
continue
Pleft=i+1
Pright=len(nums)-1
targetsum=0-nums[i]
while(Pleft<Pright):
#print(Pleft,Pright)
summ=nums[Pleft]+nums[Pright]
#print(nums[i],nums[Pleft],nums[Pright])
#print(summ)
#print(summ,targetsum)
if(summ>targetsum):
Pright-=1
elif(summ<targetsum):
Pleft+=1
else:
l.append((nums[i],nums[Pleft],nums[Pright]))
Pleft+=1
Pright-=1
#print(l)
#print(Pleft,Pright)
#去重
reList = list(set([tuple(t) for t in l]))
reList = [list(v) for v in reList]
#print(reList)
reList.sort()
return reList
LeetCode15:三数之和 Python
最新推荐文章于 2023-01-13 01:27:48 发布