Python版[leetcode]15. 三数之和(难度中等)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
这道题我感觉是有点难度的,一般都是2个数做比较,这次有3个数参与了,没有想到什么好的方法,后来直接找的参考
排序 + 双指针
本题的难点在于如何去除重复解。
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: n=len(nums) res=[] if(not nums or n<3): return [] nums.sort() res=[] for i in range(n): if(nums[i]>0): return res if(i>0 and nums[i]==nums[i-1]): continue L=i+1 R=n-1 while(L<R): if(nums[i]+nums[L]+nums[R]==0): res.append([nums[i],nums[L],nums[R]]) while(L<R and nums[L]==nums[L+1]): L=L+1 while(L<R and nums[R]==nums[R-1]): R=R-1 L=L+1 R=R-1 elif(nums[i]+nums[L]+nums[R]>0): R=R-1 else: L=L+1 return res
posted on 2020-02-07 13:36 _david李dvd 阅读(347) 评论(0) 编辑 收藏 举报