题目链接
题目描述
给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
1 | 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], |
解答
方法一
- 对列表中元素排序
- 遍历,对当前元素
nums[i]
,相当于求nums[i+1:]
的两数之和为target = 0-nums[i]
。在位置i
之前的元素不会再参与到计算中,因为假设在nums[j] (j<i)
和某元素nums[x]
之和为target
,那么在遍历位置j
时已经将[nums[j],nums[i], nums[x]]
加入结果列表 - 使用二分法求排序列表中两元素之和为
target
1 | class Solution: |
一部分测试用例:
1 | print(threeSum([1, -1, -1, 4, 2, 1, 0])) |