当前位置: 首页 > 后端技术 > Python

pythonLeetCode15.三数之和

时间:2023-03-25 22:26:09 Python

给定一个包含n个整数的数组nums,判断nums中是否存在a,b,c三个元素使得a+b+c=0?找出所有满足条件且不重复的三元组。注意:答案中不允许出现重复的三胞胎。例如,给定数组nums=[-1,0,1,2,-1,-4],满足要求的三元组集合为:[[-1,0,1],[-1,-1,2]]先对数组排序,这道题的思路是选择一个值,然后对另外两个值进行配对,那么我们可以这样理解,选择第一个值,然后用两个指针指向指向第一个值和后一个,一个指向末尾,两个指针不断向中间靠拢,不断取值存入列表,解决这个问题的思路就出来了classSolution(object):defthreeSum(self,nums):""":typenums:List[int]:rtype:List[List[int]]"""nums.sort()res=[]forkinrange(len(nums)-2):ifnums[k]>0:#肯定不会超过bunsbreakifk>0andnums[k]==nums[k-1]:continue#跳过已有数组i,j=k+1,len(nums)-1whilei0:#bigger,backpointerforwardmovesj-=1whilei0]负=[iforiindicifi<0]neg.sort()if0indicanddic[0]>=3:res.append([0,0,0])foriinpos:forjinneg:k=-i-jifkindic:if(k==iork==j)anddic[k]>=2:res.append([i,k,j])elifi>k>j:res.append([i,k,j])如果k&l吨;j:breakreturnres'''nums.sort()n=len(nums)ls=[]foriinrange(n):left=i+1right=n-1ifi>0和nums[i]==nums[i-1]:left+=1continuewhileleft0:right-=1returnls'''""":typenums:List[int]:rtype:列表[列表[int]]"""