给你一个包含 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 = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
- 0 <= nums.length <= 3000
- -10^5 <= nums[i] <= 10^5
Python 解答:
1.暴力
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res = []
aset = set()
for i in range(len(nums)):
if nums[i] > 0:
break
else:
j = i+1
total = -nums[i]
while j < len(nums):
if nums[j] not in aset:
temp = total - nums[j]
aset.add(temp)
else:
if [nums[i], nums[j], total-nums[j]] not in res:
res.append([nums[i], nums[j], total-nums[j]])
j += 1
aset.clear()
return res
2.双指针
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res = []
for i in range(len(nums)):
if nums[i] > 0:
break
else:
j, k = i+1, len(nums)-1
total = -nums[i]
while j < k:
if nums[j]+nums[k] == total:
if [nums[i], nums[j], nums[k]] not in res:
res.append([nums[i], nums[j], nums[k]])
j += 1
k -= 1
elif nums[j]+nums[k] < total:
j += 1
else:
k -= 1
return res
留言