给定一个包含n个证书的数组
nums
,判断nums
中是否存在3个元素a, b, c
,使得a+b+c=0
?找出所有满足条件且不重复的三元组。
我的解法
- 暴力搜索,将数据集分为自然数、零和负数三个列表
- 如果零集合中的元素大于3个,则在返回结果中增加3个0的选项
- 从自然数集合和负数集合各取一个数,求和的相反数,在两个列表中查找是否存在该元素
- 如果存在并且和集合中的元素不重复,加入到结果中,并加入到要比较的集合中
1 | class Solution: |
- 这种解法会超时
官方解答Python版
- 将数组排序
- 定义3个指针
i, j, k
- 遍历
i
- 该问题转化为在
i
之后的数组中寻找nums[j] + nums[k] = -nums[i]
,可以将3数之和转化为两数之和,使用双指针的方法
1 | class Solution: |