From 5309dc7151411afc4f85125ca5c9ed47f55452be Mon Sep 17 00:00:00 2001 From: openset Date: Thu, 30 May 2019 14:47:41 +0800 Subject: [PATCH] Add: Last Stone Weight --- .../last-stone-weight/last_stone_weight.go | 19 ++++++++++++ .../last_stone_weight_test.go | 31 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 problems/last-stone-weight/last_stone_weight.go create mode 100644 problems/last-stone-weight/last_stone_weight_test.go diff --git a/problems/last-stone-weight/last_stone_weight.go b/problems/last-stone-weight/last_stone_weight.go new file mode 100644 index 000000000..b1ad42f22 --- /dev/null +++ b/problems/last-stone-weight/last_stone_weight.go @@ -0,0 +1,19 @@ +package last_stone_weight + +import "sort" + +func lastStoneWeight(stones []int) int { + for len(stones) >= 2 { + n := len(stones) - 1 + sort.Ints(stones) + v := stones[n] - stones[n-1] + if v > 0 { + stones[n-1] = v + } else { + n-- + } + stones = stones[:n] + } + stones = append(stones, 0) + return stones[0] +} diff --git a/problems/last-stone-weight/last_stone_weight_test.go b/problems/last-stone-weight/last_stone_weight_test.go new file mode 100644 index 000000000..4b812dc5b --- /dev/null +++ b/problems/last-stone-weight/last_stone_weight_test.go @@ -0,0 +1,31 @@ +package last_stone_weight + +import "testing" + +type caseType struct { + input []int + expected int +} + +func TestLastStoneWeight(t *testing.T) { + tests := [...]caseType{ + { + input: []int{2, 7, 4, 1, 8, 1}, + expected: 1, + }, + { + input: []int{2, 7, 4, 1, 8, 1, 5}, + expected: 0, + }, + { + input: []int{316, 157, 73, 106, 771, 828}, + expected: 37, + }, + } + for _, tc := range tests { + output := lastStoneWeight(tc.input) + if output != tc.expected { + t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected) + } + } +}