给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
思路:先排序,再使用双指针遍历数组,找到三个数之和为0的数
func treeSum(nums []int) (result [][]int) {
result := [][]int{}
if len(nums) < 3 {
return
}
nums = quickSort(nums)
for i := 0; i < len(nums); i++ {
if nums[i] > 0 {
return
}
if i > 0 && nums[i] == nums[i-1] {
continue
}
l := i + 1 //第一个元素取i,左指针取i+1
r := len(nums) - 1 //右指针
for l < r {
sum := nums[i] + nums[l] + nums[r]
if sum == 0 {
result = append(result, []int{nums[i], nums[l], nums[r]})
l++
r--
} else if sum < 0 {
l++
} else if sum > 0 {
r--
}
}
}
return result
}
快速排序:
//快排
func quickSort(nums []int) (sortArray []int) {
if len(nums) < 2 {
return nums
} else {
pivot := nums[0]
less, great := []int{}, []int{}
for i := 1; i < len(nums); i++ {
if nums[i] <= pivot {
less = append(less, nums[i])
} else {
great = append(great, nums[i])
}
}
sortArray = append(sortArray, quickSort(less)...)
sortArray = append(sortArray, pivot)
sortArray = append(sortArray, quickSort(great)...)
return
}
}