给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
答案:
func threeSum(nums []int) [][]int {
sort.Ints(nums)
var result [][]int
for i := 0; i < len(nums)-1 && nums[i] <= 0; i++ {
if i > 0 && nums[i] == nums[i-1] {
continue
}
j := i + 1
k := len(nums) - 1
target := 0 - nums[i]
for ; j < k; {
sum := nums[j] + nums[k]
if sum == target {
result = append(result, []int{nums[i], nums[j], nums[k]})
j++
for j < k && nums[j-1] == nums[j] {
j++
}
k--
for j < k && nums[k+1] == nums[k] {
k--
}
} else if sum > target {
k--
for j < k && nums[k+1] == nums[k] {
k--
}
} else {
j++
for j < k && nums[j-1] == nums[j] {
j++
}
}
}
}
return result
}