我自己写的超时了。。。。
class Solution: def threeSum(self, nums) : nums.sort() #print(nums) nums1=[] s=[] if nums.count(0)>=3: s.append([0,0,0]) for i in range(len(nums)-2): #print(‘i= ‘+str(i)) for j in range(i+1,len(nums)-1): #print(‘j= ‘+str(j)) if 0-(nums[i]+nums[j]) in nums[j+1:]: if [nums[i],nums[j],0-(nums[i]+nums[j])] not in s: s.append([nums[i],nums[j],0-(nums[i]+nums[j])]) return s
看了别人的代码,说是使用排序+双指针。
以下是我的修改:
class Solution: def threeSum(self, nums) : nums.sort() #print(nums) nums1=[] nums2=[] s=[] if nums.count(0)>=3: s.append([0,0,0]) for i in range(len(nums)-1,-1,-1): if nums[i]>0: nums1.append(nums[i]) else: nums2.append(nums[i]) #print(nums1)#存放正数 #print(nums2)#存放非正数 for i in range(len(nums)-1): if i>0: if nums[i]==nums[i-1]: continue#如果是相同的数,则跳过 left,right=i+1,len(nums)-1#两个指针 #print(‘i= ‘+str(i)) while left<right: #左指针小于右指针 sums=nums[i]+nums[left]+nums[right] #print(‘sums= ‘+str(sums)) if right<len(nums2): break if sums==0: s.append([nums[left],nums[i],nums[right]]) while left<right and nums[left]==nums[left+1]: left+=1 while left<right and nums[right]==nums[right-1]: right-=1 left+=1 right-=1 elif sums<0: left+=1 elif sums>0: right-=1 return s
原文:https://www.cnblogs.com/taoyuxin/p/11631922.html