Files
2025-08-19 03:50:15 +08:00

93 lines
1.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
//}