给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
n = len(nums)
nums.sort()
res = []
if n < 3:
return []
for i in range(n-2):
if nums[i] > 0 : # 减少复杂度
break
if i >= 1 and nums[i] == nums[i-1]: # 对i去重
continue
k = n - 1
for j in range(i+1, n-1): # 循环两次而不是三次
if nums[i] + nums[j] > 0: # 减少复杂度
break
if j >= i+2 and nums[j] == nums[j-1]: # 对j去重
continue
while k > j and nums[j] + nums[k] > -nums[i]: # 对k去重加去复杂度
k -= 1
if j == k:
break
if nums[i] + nums[j] + nums[k] == 0:
res.append([nums[i], nums[j], nums[k]])
return res
- 去重:要注意不能包含重复的数组,需要先对数组排序
- 减少时间复杂度:(1)三个数,两遍循环 (2)第一个数大于零:break;前两个数之和大于零:break;