File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change 1+ package youngDaLee
2+
3+ import (
4+ "fmt"
5+ "slices"
6+ )
7+
8+ func threeSum (nums []int ) [][]int {
9+ // sort nums
10+ slices .Sort (nums )
11+
12+ // unique-ify nums
13+ uniqueKeys := make (map [string ]bool )
14+
15+ var result [][]int
16+ left := 0
17+ for left < len (nums )- 2 {
18+ // init pivot, right
19+ pivot := left + 1
20+ right := len (nums ) - 1
21+
22+ for pivot < right {
23+ sum := nums [left ] + nums [pivot ] + nums [right ]
24+ unikeyKey := fmt .Sprintf ("%d%d%d" , nums [left ], nums [pivot ], nums [right ])
25+ if sum == 0 {
26+ if _ , ok := uniqueKeys [unikeyKey ]; ! ok {
27+ uniqueKeys [unikeyKey ] = true
28+ result = append (result , []int {nums [left ], nums [pivot ], nums [right ]})
29+ }
30+ for pivot < right - 1 && nums [pivot ] == nums [pivot + 1 ] {
31+ pivot += 1
32+ }
33+ for pivot < right - 1 && nums [right ] == nums [right - 1 ] {
34+ right -= 1
35+ }
36+ pivot += 1
37+ right -= 1
38+ } else if sum < 0 {
39+ pivot += 1
40+ } else if sum > 0 {
41+ right -= 1
42+ }
43+ }
44+
45+ left += 1
46+ for left < len (nums )- 2 && nums [left ] == nums [left - 1 ] {
47+ left += 1
48+ }
49+ }
50+ return result
51+ }
You can’t perform that action at this time.
0 commit comments