给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
注意:
- 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
- 解集中不能包含重复的三元组。
例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, -10, 20),(-10, 0, 10) 0 <= S.length <= 1000
思路:指定一个值,然后找另外两个值,找另外两个值就是头尾相向而行的方式,很经典
package main
import "sort"
/**
*
* @param num int整型一维数组
* @return int整型二维数组
*/
func threeSum( num []int ) [][]int {
// write code here
if len(num) < 3 {
return nil
}
sort.Ints(num)
idx := 0
res := make([][]int, 0)
for i := 0; i < len(num)-2; i++ {
if i > 0 && num[i] == num[i-1] {
continue
}
idx = i
start := i + 1
end := len(num) - 1
for start < end {
if num[idx]+num[start]+num[end] == 0 {
res = append(res, []int{num[idx], num[start], num[end]})
start++
for start < len(num)-1 && num[start] == num[start-1] {
start++
}
}
if num[idx]+num[start]+num[end] > 0 {
end--
for end < len(num)-1 && end >= 0 && num[end] == num[end+1] {
end--
}
} else {
start++
for start < len(num)-1 && num[start] == num[start-1] {
start++
}
}
}
}
return res
}