15-三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
思路
因为要的只是元素的值并非指针,所以 nums 顺序可以调整,优先想到排好序更利于后续操作。
求和就想到 167-两数之和 II - 输入有序数组 中的双指针,此题为三数之和,自然可以使用三个指针。
还需要考虑到不能有重复的答案,因为已经排序好了,所以相同的元素都挨在一起,指针挪动时如果是当前指针同样的元素就跳过。
时间复杂度 O(n^2)
空间复杂度 O(n)
题解
go
func threeSum(nums []int) [][]int {
var res [][]int = make([][]int, 0)
sort.Ints(nums)
for i := 0; i < len(nums) - 2; i ++ {
if nums[i] > 0{
break
}
if i >