来源
https://leetcode-cn.com/problems/3sum/
问题描述
给定一个包含 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 cc []int
for i := 0; i < len(nums); i++ {
if i > 0 && nums[i] == nums[i-1] {
continue
}
left := i + 1;
right := len(nums) - 1
for {
if left < right {
sum := nums[left] + nums[right] + nums[i]
if sum < 0 {
left++
} else if sum > 0 {
right--
} else if sum == 0 {
cc = append(cc, nums[i], nums[left], nums[right])
for ; left < right && nums[left+1] == nums[left]; {
left++
}
for ; left < right && nums[right-1] == nums[right]; {
right--
}
left++
right--
}
} else {
break
}
}
}
fmt.Println(cc)
//去除重复的元素集合
return nil
}
暴力穷举法虽然可以得到结果,但是 会有重复的结果集合。所以这个问题不能这么来做,得从两端移动的方式寻找合适的值