目录
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 去重
本文深入探讨了经典的三数之和问题,提供了一种高效解决方案——排序+双指针法,通过实例演示如何找出数组中所有不重复的三元组,使它们的和为零。文章详细解释了算法原理,包括排序的重要性、双指针的移动策略以及使用set容器进行去重的方法。
7087

被折叠的 条评论
为什么被折叠?



