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 //}