From afe35fb05feee367d80e466e1d46eea699fa84ea Mon Sep 17 00:00:00 2001 From: Legolas Bloom Date: Fri, 10 Oct 2025 17:47:59 +0800 Subject: [PATCH] 3147. Taking Maximum Energy From the Mystic Dungeon --- leetcode/array/3147.go | 20 ++++++++++++++++++++ leetcode/array/3147_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 leetcode/array/3147.go create mode 100644 leetcode/array/3147_test.go diff --git a/leetcode/array/3147.go b/leetcode/array/3147.go new file mode 100644 index 0000000..8de1230 --- /dev/null +++ b/leetcode/array/3147.go @@ -0,0 +1,20 @@ +package larray + +import ( + "slices" +) + +func maximumEnergy(energy []int, k int) int { + length := len(energy) + + dp := make([]int, length) + for i := length - k; i < length; i++ { + dp[i] = energy[i] + } + + for i := length - k - 1; i >= 0; i-- { + dp[i] = dp[i+k] + energy[i] + + } + return slices.Max(dp) +} diff --git a/leetcode/array/3147_test.go b/leetcode/array/3147_test.go new file mode 100644 index 0000000..3ef0d8e --- /dev/null +++ b/leetcode/array/3147_test.go @@ -0,0 +1,35 @@ +package larray + +import "testing" + +func TestMaximumEnergy(t *testing.T) { + tests := []struct { + name string + energy []int + k int + expected int + }{ + { + name: "Example 1", + energy: []int{5, 2, -10, -5, 1}, + k: 3, + expected: 3, + }, + { + name: "Example 2", + energy: []int{-2, -3, -1}, + k: 2, + expected: -1, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := maximumEnergy(tt.energy, tt.k) + if result != tt.expected { + t.Errorf("maximumEnergy(%v, %d) = %d, expected %d", + tt.energy, tt.k, result, tt.expected) + } + }) + } +}