给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解析
1)本题的难点在于去重,而且在过程中去重,最后去重就会超时;
2)首先将数组排序,从第一个数开始遍历,序号记为i;
3)然后定义两个指针,令左指针 l=i+1,右指针 r=n-1,当 l<r 时,while循环;
4)如果 nums[i] + nums[l] + nums[r] == 0,则记录这个解;
5)判断 nums[l] 和 nums[l+1],nums[r] 和 nums[r-1],如果相等,则移动指针,排除重复解;
6)若和大于 0,说明 nums[r] 太大,r 左移;若和小于 0,说明 nums[l] 太小,l 右移;
代码示例
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
lst = []
n = len(nums)
for i in range(n):
if i > 0 and nums[i] == nums[i-1]:
continue
l = i+1
r = n-1
while l<r:
s = nums[i] + nums[l] + nums[r]
if s == 0:
lst.append([nums[i], nums[l], nums[r]])
while l < r and nums[l] == nums[l+1]:
l += 1
while l < r and nums[r] == nums[r-1]:
r -= 1
l += 1
r -= 1
elif s < 0:
l += 1
else:
r -= 1
return lst
执行用时:628 ms, 在所有 Python3 提交中击败了 75.65% 的用户.
本文为 陈华 原创,欢迎转载,但请注明出处:http://www.chenhuax.com/read/418