目录
1.题目描述
题目链接:三树之和
相似题目1:[LeetCode — 16] 最接近的三数之和
相似题目2:[LeetCode — 18] 四数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
2.解决方案
方法一:排序 + 双指针法
算法
这里用到了双指针法,首先对数组 nums 进行排序,这是为了更方便控制前后指针的移动。
让 key 指向数组中的某一个元素(移动方向:从前后到),在 key 之后的元素中只要找到两个元素,当这两个元素之和等于 -nums[key] 时,找到了满足题目要求的一对三元组。
在寻找所有满足条件的三元组的过程中,用 set 容器来完成去重。
代码链接:看代码,点这里嗷~
复杂度分析:
时间复杂度:O(N^2),外层遍历O(N) + 内层双指针遍历O(N)
空间复杂度:O(N),用 stl 容器 set 去重