Skip to content

Commit dfbc331

Browse files
committed
add solution for three sum problem
1 parent 4d4dc12 commit dfbc331

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

3sum/youngDaLee.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
}

0 commit comments

Comments
 (0)