2025-03-28:超级饮料的最大强化能量。用go语言,你有两个整数数组 energyDrinkA 和 energyDrinkB,它们的长度都是 n,分别表示 A 和 B 两种能量饮料在每小时提供的强化能量。
你的目标是选择每小时饮用一种能量饮料,以最大化在接下来的 n 小时内获得的总强化能量。需要注意的是,若你从一种能量饮料切换到另一种,必须等待读体能系统恢复,这样在恢复期间的那个小时内你不会得到任何强化能量。
请计算并返回在这 n 小时内你能够获得的最大总强化能量。在选择饮用的能量饮料时,你可以从任意一种饮料开始。
n == energyDrinkA.length == energyDrinkB.length。
3 <= n <= 100000。
1 <= energyDrinkA[i], energyDrinkB[i] <= 100000。
输入:energyDrinkA = [1,3,1], energyDrinkB = [3,1,1]。
输出:5。
解释:
要想获得 5 点强化能量,需要选择只饮用能量饮料 A(或者只饮用 B)。
题目来自leetcode3259。
maxEnergyBoost
,接受两个整数数组 energyDrinkA 和 energyDrinkB,并返回一个 int64 类型的值。总的时间复杂度为 O(n),因为程序中使用了单次遍历数组的方式解决问题。
总的额外空间复杂度为 O(n),复杂度是由定义的二维数组 d 决定的。
package main
import (
"fmt"
)
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int)int64 {
n := len(energyDrinkA)
d := make([][2]int64, n+1)
for i := 1; i <= n; i++ {
d[i][0] = d[i-1][0] + int64(energyDrinkA[i-1])
d[i][1] = d[i-1][1] + int64(energyDrinkB[i-1])
if i >= 2 {
d[i][0] = max(d[i][0], d[i-2][1]+int64(energyDrinkA[i-1]))
d[i][1] = max(d[i][1], d[i-2][0]+int64(energyDrinkB[i-1]))
}
}
return max(d[n][0], d[n][1])
}
func main() {
energyDrinkA := []int{1, 3, 1}
energyDrinkB := []int{3, 1, 1}
result := maxEnergyBoost(energyDrinkA, energyDrinkB)
fmt.Println(result)
}
# -*-coding:utf-8-*-
defmax_energy_boost(energy_drink_a, energy_drink_b):
n = len(energy_drink_a)
d = [[0] * 2for _ inrange(n + 1)]
for i inrange(1, n + 1):
d[i][0] = d[i - 1][0] + energy_drink_a[i - 1]
d[i][1] = d[i - 1][1] + energy_drink_b[i - 1]
if i >= 2:
d[i][0] = max(d[i][0], d[i - 2][1] + energy_drink_a[i - 1])
d[i][1] = max(d[i][1], d[i - 2][0] + energy_drink_b[i - 1])
returnmax(d[n][0], d[n][1])
if __name__ == "__main__":
energy_drink_a = [1, 3, 1]
energy_drink_b = [3, 1, 1]
result = max_energy_boost(energy_drink_a, energy_drink_b)
print(result)
我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。