2025-03-28:超级饮料的最大强化能量。用go语言,你有两个整数数组 energyDrinkA 和 energyDrink
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 类型的值。 -
函数中首先获取数组的长度 n,并创建了一个二维数组 d 用来保存计算过程中的状态值,d 的大小为 n+1 行 2 列。
-
使用 for 循环遍历数组元素,对于每个位置 i,计算当前位置选择 A 类能量饮料和选择 B 类能量饮料时的总强化能量。
-
在计算过程中,根据规则如果当前位置 i 大于等于 2,就需要考虑是否要在上一次选择的基础上切换到另一种能量饮料。
-
最终返回在 n 小时内获得的最大总强化能量,即返回 d[n][0] 和 d[n][1] 中较大的值。
-
在主函数 main 中,定义了两个示例数组 energyDrinkA 和 energyDrinkB,并调用了 maxEnergyBoost 函数进行计算,并将结果输出打印。
总的时间复杂度为 O(n),因为程序中使用了单次遍历数组的方式解决问题。
总的额外空间复杂度为 O(n),复杂度是由定义的二维数组 d 决定的。
Go完整代码如下:
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)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def max_energy_boost(energy_drink_a, energy_drink_b):
n = len(energy_drink_a)
d = [[0] * 2 for _ in range(n + 1)]
for i in range(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])
return max(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)
- 点赞
- 收藏
- 关注作者
评论(0)