func threeSum(nums []int) [][]int {
// 从小到大排序,如果大于0就不用找了
sort.Ints(nums)
res := [][]int{}
for i:=0; i<len(nums)-2; i++ {
// 结束查找
if nums[i] > 0 {
break
}
// 在数组[i+1:] 双指针 查找两数之和
target := -nums[i]
left := i+1
right := len(nums)-1
if i == 0 || nums[i]!=nums[i-1] { // 过滤重复的
for left<right {
if nums[left]+nums[right] == target {
res = append(res, []int{nums[i], nums[left], nums[right]})
// 重复元素过滤
for left<right && nums[left]==nums[left+1]{
left++
}
for left<right && nums[right]==nums[right-1]{
right--
}
// 指向下一个
left++
right--
} else if nums[left]+nums[right]<target {
left++
} else {
right--
}
}
}
}
return res
}