给你一串数字,找出之和为0的3个数,并且结果不能重复
时间: 2023-12-03 20:44:14 浏览: 32
好的,可以使用三重循环来解决此问题。具体步骤如下:
1. 将给定的数字列表 nums 排序。
2. 从左到右依次枚举每一个数作为第一个数 a。
3. 在 a 的右侧选择两个数 b 和 c,使得 b + c 的值等于 -a。为了避免结果重复,我们要保证 b 和 c 的下标均大于 a 的下标。
4. 如果找到了符合条件的 b 和 c,将它们加入结果列表 res 中。
5. 最后返回结果列表 res。
下面是 Python 代码实现:
```python
def threeSum(nums):
nums.sort()
res = []
n = len(nums)
for i in range(n):
if nums[i] > 0:
break
if i > 0 and nums[i] == nums[i-1]:
continue
left, right = i+1, n-1
while left < right:
s = nums[i] + nums[left] + nums[right]
if s < 0:
left += 1
elif s > 0:
right -= 1
else:
res.append([nums[i], nums[left], nums[right]])
while left < right and nums[left] == nums[left+1]:
left += 1
while left < right and nums[right] == nums[right-1]:
right -= 1
left += 1
right -= 1
return res
```
这个算法的时间复杂度为 O(n^2),空间复杂度为 O(logn)。