首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2025-03-28:超级饮料的最大强化能量。用go语言,你有两个整数数组 energyDrinkA 和 energyDrink

2025-03-28:超级饮料的最大强化能量。用go语言,你有两个整数数组 energyDrinkA 和 energyDrink

作者头像
福大大架构师每日一题
发布2025-03-28 15:15:53
发布2025-03-28 15:15:53
7900
代码可运行
举报
运行总次数:0
代码可运行

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。

大体步骤如下:

  1. 1. 首先,定义了一个函数 maxEnergyBoost,接受两个整数数组 energyDrinkA 和 energyDrinkB,并返回一个 int64 类型的值。
  2. 2. 函数中首先获取数组的长度 n,并创建了一个二维数组 d 用来保存计算过程中的状态值,d 的大小为 n+1 行 2 列。
  3. 3. 使用 for 循环遍历数组元素,对于每个位置 i,计算当前位置选择 A 类能量饮料和选择 B 类能量饮料时的总强化能量。
  4. 4. 在计算过程中,根据规则如果当前位置 i 大于等于 2,就需要考虑是否要在上一次选择的基础上切换到另一种能量饮料。
  5. 5. 最终返回在 n 小时内获得的最大总强化能量,即返回 d[n][0] 和 d[n][1] 中较大的值。
  6. 6. 在主函数 main 中,定义了两个示例数组 energyDrinkA 和 energyDrinkB,并调用了 maxEnergyBoost 函数进行计算,并将结果输出打印。

总的时间复杂度为 O(n),因为程序中使用了单次遍历数组的方式解决问题。

总的额外空间复杂度为 O(n),复杂度是由定义的二维数组 d 决定的。

Go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
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完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
# -*-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 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档