编码解决ThreeSum问题,算法复杂度为O(N2),实现如下:
package main
import "fmt"
func calcThreeSum(array []int) {
thirdReversed := make(map[int]int)
for i, item := range array {
thirdReversed[-item] = i
}
calcedThree := make(map[int]bool)
for i := range array {
for j := range array {
if i == j {
continue
}
firstTwo := array[i] + array[j]
if idx, ok := thirdReversed[firstTwo]; ok {
if _, ok := calcedThree[i+j+idx]; !ok {
fmt.Println( fmt.Sprintf("%d[%d], %d[%d], %d[%d]", array[i], i, array[j], j, -firstTwo, idx))
calcedThree[i+j+idx] = true
}
}
}
}
}
func main() {
testData := [][]int {
{1,2,3,4,-7,-3},
{10, -10, 10, -30, 0, 20},
}
for i, data := range testData {
fmt.Println("test", i)
calcThreeSum(data)
}
}
运行地址点这里。