From 7ed025a22de5b9b595fcfd955e703be9fb25452e Mon Sep 17 00:00:00 2001 From: openset Date: Sun, 7 Jul 2019 18:14:29 +0800 Subject: [PATCH 1/2] Add: 3Sum --- problems/3sum/3sum.go | 30 +++++++++++++++++++++++++++++ problems/3sum/3sum_test.go | 39 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/problems/3sum/3sum.go b/problems/3sum/3sum.go index d66b10a3b..bdd2f1f0b 100644 --- a/problems/3sum/3sum.go +++ b/problems/3sum/3sum.go @@ -1 +1,31 @@ package p_3sum + +import "sort" + +func threeSum(nums []int) [][]int { + sort.Ints(nums) + ans, length := make([][]int, 0), len(nums) + for i := 0; i < length-2; i++ { + if nums[i] <= 0 && (i == 0 || nums[i] != nums[i-1]) { + l, r := i+1, length-1 + for l < r { + sum := nums[i] + nums[l] + nums[r] + if sum < 0 { + l++ + } else if sum > 0 { + r-- + } else { + ans = append(ans, []int{nums[i], nums[l], nums[r]}) + l, r = l+1, r-1 + for l < r && nums[l] == nums[l-1] { + l++ + } + for l < r && nums[r] == nums[r+1] { + r-- + } + } + } + } + } + return ans +} diff --git a/problems/3sum/3sum_test.go b/problems/3sum/3sum_test.go index d66b10a3b..fa7edc9ee 100644 --- a/problems/3sum/3sum_test.go +++ b/problems/3sum/3sum_test.go @@ -1 +1,40 @@ package p_3sum + +import ( + "reflect" + "testing" +) + +type caseType struct { + input []int + expected [][]int +} + +func TestThreeSum(t *testing.T) { + tests := [...]caseType{ + { + input: []int{-1, 0, 1, 2, -1, -4}, + expected: [][]int{ + {-1, -1, 2}, + {-1, 0, 1}, + }, + }, + { + input: []int{0, 0, 0, 0}, + expected: [][]int{ + {0, 0, 0}, + }, + }, { + input: []int{-2, 0, 0, 2, 2}, + expected: [][]int{ + {-2, 0, 2}, + }, + }, + } + for _, tc := range tests { + output := threeSum(tc.input) + if !reflect.DeepEqual(output, tc.expected) { + t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected) + } + } +} From bd54c0a66c414a8925585fc5b462ea106b47518e Mon Sep 17 00:00:00 2001 From: openset Date: Sun, 7 Jul 2019 18:27:51 +0800 Subject: [PATCH 2/2] Add: case --- problems/3sum/3sum_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/problems/3sum/3sum_test.go b/problems/3sum/3sum_test.go index fa7edc9ee..5ebb2ac31 100644 --- a/problems/3sum/3sum_test.go +++ b/problems/3sum/3sum_test.go @@ -24,8 +24,15 @@ func TestThreeSum(t *testing.T) { expected: [][]int{ {0, 0, 0}, }, - }, { - input: []int{-2, 0, 0, 2, 2}, + }, + { + input: []int{-2, 0, 0, 2, 2, 2}, + expected: [][]int{ + {-2, 0, 2}, + }, + }, + { + input: []int{-2, 0, 0, 2, 2, 2, 2}, expected: [][]int{ {-2, 0, 2}, },