题目描述:
从一个list里找出和为0的三个数,结果不能包含重复值
注意:
①开始想到的都是从头开始匹配,时间复杂度为O(n^3),就超时了
解决:从两头来找
②从两头来找就可以固定两个数不变,只有一个数在变,就很好控制没有重复值这个条件
③第一个数的index循环的时候,要保证第一个数在之前的计算中未出现过,就是说如果nums[index]==nums[index-1],就继续index++
class Solution(object): def threeSum(self,nums): nums.sort() res=[] i=0 while i<len(nums)-2: j=i+1;k=len(nums)-1 while j<k: sum=nums[i]+nums[j]+nums[k] #print nums[i],nums[j],nums[k] if sum==0: res.append([nums[i],nums[j],nums[k]]) #print i,j,k if sum<=0: t=j while nums[t]==nums[j] and t<k: t=t+1 j=t if sum>=0: t=k while nums[t]==nums[k] and t>j: t=t-1 k=t t=i while nums[t]==nums[i] and t<len(nums)-2: t+=1 i=t return res if __name__=="__main__": sol=Solution() nums=[0,0,0,0] ans=sol.threeSum(nums) for i in range(0,len(ans)): print ans[i]