Time: 20190920
Type: Medium
题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4]
,
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
首先从大的方面来看,排序之后比较容易做到去重,相同元素直接选取代表即可。
拍完序之后,以下标i
从左往右遍历作为主循环,找到剩下两个加起来和为-nums[i]
的两个元素。
这样的两个元素一定出现在nums[i]
后面,这个限制非常关键。因为主循环是从左往右遍历,如果不限制只在当前元素后面找,则会重复答案。
加上这个限制,如果当前元素大于0,则表示后面的所有元素都大于0,三个数相加之和不可能为0.
这里有两次去重的概念,首先是在外层,如果nums[i]
和上一个元素nums[i-1]
相同,则直接跳过,因为相同值已经考虑过了。
另一个是在三数之和为0时,还要其他的解,这里也考虑一次去重即可。
代码