Files

93 lines
1.9 KiB
Go
Raw Permalink Normal View History

2025-08-19 03:50:15 +08:00
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println(threeSum([]int{1, -1, -1, 0}))
}
func threeSum(nums []int) [][]int {
result := make([][]int, 0)
sort.Ints(nums)
for i := 0; i < len(nums); i++ {
if i-1 >= 0 {
if nums[i] == nums[i-1] {
continue
}
}
left, right := i+1, len(nums)-1
for left < right {
num := nums[left] + nums[right]
if num == -nums[i] {
value := make([]int, 0)
value = append(value, nums[left], nums[right], nums[i])
result = append(result, value)
left++
right--
if left-1 > 0 {
for nums[left] == nums[left-1] && left < right {
left++
}
}
if right+1 < len(nums) {
for nums[right] == nums[right+1] && left < right {
right--
}
}
} else if num < -nums[i] {
left++
} else if num >= -nums[i] {
right--
}
}
}
return result
}
//func threeSum(nums []int) [][]int {
// result := make([][]int, 0)
// hash := make(map[int][]int)
// result2 := make(map[[3]int]struct{}, 0)
// right := len(nums) - 1
// for i := 0; i < right+1; i++ {
// hash[nums[i]] = append(hash[nums[i]], i)
// }
// fmt.Println(hash)
// for left := 0; left < len(nums); left++ {
// for right := left + 1; right < len(nums); right++ {
// sum := nums[left] + nums[right]
// z := -sum
// if value, ok := hash[z]; ok {
// for _, v := range value {
// if v == left || v == right {
// continue
// } else {
// num := [3]int{nums[v], nums[left], nums[right]}
// slice := num[:] // 或直接创建新切片slice := []int{num[0], num[1], num[2]}
// sort.Ints(slice)
// result2[[3]int(slice)] = struct{}{}
// }
// }
// } else {
// continue
// }
// }
// }
// fmt.Println("result2", result2)
// for k, _ := range result2 {
// value := make([]int, 0)
// for _, v := range k {
// value = append(value, v)
// }
// result = append(result, value)
// }
// return result
//}