当前位置: 首页 > article >正文

LeetCode - 3259. 超级饮料的最大强化能量

. - 力扣(LeetCode)

题目

来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。

你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到另一种,你需要等待一小时来梳理身体的能量体系(在那个小时里你将不会获得任何强化能量)。

返回在接下来的 n 小时内你能获得的 最大 总强化能量。

注意 你可以选择从饮用任意一种能量饮料开始。

  • 示例 1:
    • 输入:energyDrinkA = [1,3,1], energyDrinkB = [3,1,1]
    • 输出:5
    • 解释:要想获得 5 点强化能量,需要选择只饮用能量饮料 A(或者只饮用 B)。
  • 示例 2:
    • 输入:energyDrinkA = [4,1,1], energyDrinkB = [1,1,3]
    • 输出:7
    • 解释:
      • 第一个小时饮用能量饮料 A。
      • 切换到能量饮料 B ,在第二个小时无法获得强化能量。
      • 第三个小时饮用能量饮料 B ,并获得强化能量。

解题方案

每一步要么选择A,要么选择B,暴力解法是列举所有可能的序列组合。

列举所有可能的序列组合的优雅解法则是动态规划。

下面思考动态规划的状态方程:第[i]步,

\left\{\begin{matrix} d_a[i] = max \{ d_a[i - 1], d_b[i - 2] \} + energyDrinkA[i] & when\ select \ drinkA\ at\ i_{th}\ step \\ d_b[i] = max \{ d_a[i - 2], d_b[i - 1] \} + energyDrinkB[i] & when\ select \ drinkB\ at\ i_{th}\ step \end{matrix}\right.

初始化状态:

\left\{\begin{matrix} d_a[0] = energyDrinkA[0], \ \ d_a[1] = d_a[0] + energyDrinkA[1] \\ d_b[0] = energyDrinkB[0], \ \ d_b[1] = d_b[0] + energyDrinkB[1] \end{matrix}\right.

class Solution:
    def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
        d = [[0, 0] for _ in range(len(energyDrinkA))]
        d[0] = [energyDrinkA[0], energyDrinkB[0]]
        d[1] = [sum(energyDrinkA[0:2]), sum(energyDrinkB[0:2])]
        for i in range(2, len(energyDrinkA)):
            d[i][0] = max(d[i - 1][0], d[i - 2][1]) + energyDrinkA[i]
            d[i][1] = max(d[i - 2][0], d[i - 1][1]) + energyDrinkB[i]
        return max(d[-1])
        

分析复杂度

  • 时间复杂度为计算d数组(2n元素)的时间,O(n) 

  • 空间复杂度为d数组的空间2n,即O(n)

看下AI 如何

MarsCode直接用动态规划解决了这个问题。

在有固定解法或者套路的题目上,AI是可以替代人类的。

 


http://www.kler.cn/a/375965.html

相关文章:

  • 1分钟解决Excel打开CSV文件出现乱码问题
  • Windows下将网盘挂载到本地使用(Docker+AList+RaiDrive)
  • MySQL 和 PostgreSQL 的对比概述
  • AI视频管理平台中使用目标检测模型中的NMS参数原理及设置原则
  • ESP32/ESP8266开发板单向一对多ESP-NOW无线通信
  • 后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)
  • 小林渗透入门:burpsuite+proxifier抓取小程序流量
  • Linux补基础之:系统和进程
  • 最新整理:Selenium自动化测试面试题
  • 24/11/2 算法笔记 拆解LDA
  • css, 文字超出用省略号,包含单行文本省略号,多行文本省略号
  • 深度学习之学习率
  • VSCode进阶之路
  • 如何使用python完成数据统计分析及预测?
  • HTML5加密技术详解
  • docker部署nginx+nacos+redis+java镜像和容器
  • 软考(中级-软件设计师)计算机网络篇(1101)
  • Vue3中Element Plus==el-eialog弹框中的input无法获取表单焦点
  • GAN在AIGC中的应用
  • Java版企电子招标采购系统源业码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 【MATLAB代码】基于IMM(Interacting Multiple Model)算法的目标跟踪,所用模型:CV、CA、CT
  • Python 基础知识(基础操作内容)
  • 2024 Rust现代实用教程 流程控制与函数
  • 袁庭新陕西理工大学演讲——AIGC时代面临的机遇与挑战
  • 《机器学习by周志华》学习笔记-神经网络-04全局最小误差与局部极小误差
  • 数学建模学习(132):使用Python基于Fuzzy VIKOR的多准则决策分析