| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- package main
 
- import (
 
- 	"sort"
 
- )
 
- func twoSum(nums []int, target int) [][]int {
 
- 	n := len(nums)
 
- 	l, r := 0, n-1
 
- 	res := make([][]int, 0)
 
- 	for l < r {
 
- 		ln, rn := nums[l], nums[r]
 
- 		sum := ln + rn
 
- 		if sum < target {
 
- 			for ; l < r && nums[l] == ln; l++ {
 
- 			}
 
- 		} else if sum > target {
 
- 			for ; l < r && nums[r] == rn; r-- {
 
- 			}
 
- 		} else {
 
- 			res = append(res, []int{ln, rn})
 
- 			for ; l < r && nums[l] == ln; l++ {
 
- 			}
 
- 		}
 
- 	}
 
- 	return res
 
- }
 
- func threeSum(nums []int) [][]int {
 
- 	if len(nums) < 3 {
 
- 		return [][]int{}
 
- 	}
 
- 	sort.Ints(nums)
 
- 	res := make([][]int, 0)
 
- 	for a := 0; a < len(nums)-2; a++ {
 
- 		if a > 0 && nums[a] == nums[a-1] {
 
- 			continue
 
- 		}
 
- 		// the same as twoSum: target -> -nums[a], nums -> nums[a+1:]
 
- 		// one or more or none solutions
 
- 		b, c := a+1, len(nums)-1
 
- 		for b < c {
 
- 			nb, nc := nums[b], nums[c]
 
- 			sum := nums[a] + nb + nc
 
- 			if sum < 0 {
 
- 				b++
 
- 			} else if sum > 0 {
 
- 				c--
 
- 			} else {
 
- 				res = append(res, []int{nums[a], nb, nc})
 
- 				for ; b < c && nums[b] == nb; b++ {
 
- 				}
 
- 				for ; b < c && nums[c] == nc; c-- {
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	return res
 
- }
 
- /* func main() {
 
- 	a1 := []int{-1, 0, 1, 2, -1, -4}
 
- 	fmt.Println(threeSum(a1))
 
- 	a2 := []int{-1, 0, -4}
 
- 	fmt.Println(threeSum(a2))
 
- 	a3 := []int{0, 0, 0}
 
- 	fmt.Println(threeSum(a3))
 
- } */
 
 
  |