42 lines
647 B
Go
42 lines
647 B
Go
package three_sum
|
|
|
|
import (
|
|
"slices"
|
|
)
|
|
|
|
func TwoSum(numbers []int, target int, solutions map[[3]int]bool) {
|
|
start := 0
|
|
end := len(numbers) - 1
|
|
|
|
for start < end {
|
|
sum := numbers[start] + numbers[end]
|
|
|
|
if sum < target {
|
|
start++
|
|
} else if sum > target {
|
|
end--
|
|
} else {
|
|
solutions[[3]int{-target, numbers[start], numbers[end]}] = true
|
|
start++
|
|
}
|
|
}
|
|
}
|
|
|
|
func ThreeSum(nums []int) [][]int {
|
|
slices.Sort(nums)
|
|
|
|
solutions := map[[3]int]bool{}
|
|
|
|
for i := range nums {
|
|
TwoSum(nums[i+1:], -nums[i], solutions)
|
|
}
|
|
|
|
result := [][]int{}
|
|
|
|
for solution := range solutions {
|
|
result = append(result, solution[:])
|
|
}
|
|
|
|
return result
|
|
}
|