首页 > 编程语言 >LeetCode:3259. 超级饮料的最大强化能量(DP Java)

LeetCode:3259. 超级饮料的最大强化能量(DP Java)

时间:2024-11-04 20:20:07浏览次数:5  
标签:3259 Java 饮料 强化 数组 energyDrinkB 能量 energyDrinkA LeetCode

目录

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

题目描述:

实现代码与解析:

DP

原理思路:


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

题目描述:

        来自未来的体育科学家给你两个整数数组 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 ,并获得强化能量。

提示:

  • n == energyDrinkA.length == energyDrinkB.length
  • 3 <= n <= 105
  • 1 <= energyDrinkA[i], energyDrinkB[i] <= 105

实现代码与解析:

DP

class Solution {
    public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {

        int n = energyDrinkA.length;
        long[][] f = new long[n][2];

        f[0][0] = energyDrinkA[0];
        f[0][1] = energyDrinkB[0];

/*        f[1][0] = Math.max(energyDrinkB[1], energyDrinkA[0] + energyDrinkA[1]);
        f[1][1] = Math.max(energyDrinkA[1], energyDrinkB[0] + energyDrinkB[1]);*/
        f[1][0] = energyDrinkA[0] + energyDrinkA[1];
        f[1][1] = energyDrinkB[0] + energyDrinkB[1];
        for (int i = 2; i < n; i++) {
            f[i][0] = Math.max(f[i - 1][0], f[i - 2][1]) + energyDrinkA[i];
            f[i][1] = Math.max(f[i - 1][1], f[i - 2][0]) + energyDrinkB[i];
        }

        return Math.max(f[n - 1][0], f[n - 1][1]);
    }
}

原理思路:

  • 从索引 2 开始到数组长度 n - 1 进行循环,用于逐步计算 f 数组每一行的值。
  • 对于 f[i][0]
    • 它通过取 f 数组中前一个位置(i - 1)的第一列的值 f[i - 1][0] 和再往前一个位置(i - 2)的第二列的值 f[i - 2][1] 两者中的最大值,然后加上 energyDrinkA 数组当前位置(索引为 i)的元素来更新自身。这意味着当前选择 energyDrinkA 数组第 i 个元素时的最大能量值,取决于前一步选择 energyDrinkA 相关的最大能量(f[i - 1][0])或者是再前一步选择 energyDrinkB 相关且转换到当前与 energyDrinkA 结合的最大能量(f[i - 2][1])。
  • 对于 f[i][1]
    • 与 f[i][0] 的计算逻辑类似,只是对应的列和数组不同。它取 f 数组中前一个位置(i - 1)的第二列的值 f[i - 1][1] 和再往前一个位置(i - 2)的第一列的值 f[i - 2][0] 两者中的最大值,再加上 energyDrinkB 数组当前位置(索引为 i)的元素来更新自身。即当前选择 energyDrinkB 数组第 i 个元素时的最大能量值,取决于前一步选择 energyDrinkB 相关的最大能量(f[i - 1][1])或者是再前一步选择 energyDrinkA 相关且转换到当前与 energyDrinkB 结合的最大能量(f[i - 2][0])。

标签:3259,Java,饮料,强化,数组,energyDrinkB,能量,energyDrinkA,LeetCode
From: https://blog.csdn.net/Cosmoshhhyyy/article/details/143493119

相关文章

  • Java 面向对象
    初识面向对象面向对象编程本质是:以类的方式组织代码,以对象的组织(封装)数据抽象:抽取相像的地方三大特性:封装:把数据装到盒子中不让别人查看,留一个接口自己使用继承:孩子继承父母的资产多态:说同一句话每个人都表达出不同的意思。从认识论角度考虑是先有对象后有类。对象:具......
  • Java8新特性:函数式接口、lambda表达式和Stream流式编程
    函数式接口、lambda表达式和Stream流式编程基于IJava编辑在Java中,函数式接口、Lambda表达式和Stream流式编程是Java8及更高版本中引入的重要特性,它们共同支持了更简洁、更灵活的编程方式,特别是在处理集合和并发编程方面。下面分别介绍这三个概念:函数式接口(FunctionalInterf......
  • leetcode-hot100-两数之和
    两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。示例输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums......
  • Java多线程编程(三)一>详解synchronized, 死锁,wait和notify
    目录: 一.synchronized的使用:   二. 常见死锁情况: 三.如何避免死锁:  四.wait和notify一.synchronized的使用: 我们知道synchronized锁具有互斥的特点:synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他线程如果也执......
  • java计算机毕业设计程序课程在线练习系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,程序课程在教育体系中的重要性日益凸显。如今,计算机技术已经渗透到各个领域,掌握程序知识成为了许多行业对人才的基本要求......
  • Leetcode—280. 摆动排序【中等】Plus
    2024每日刷题(199)Leetcode—280.摆动排序实现代码classSolution{public:voidwiggleSort(vector<int>&nums){//n[0]≤n[1]≥n[2]≤n[3]//奇数大于等于前面元素偶数小于等于前面元素//352164//35162......
  • java计算机毕业设计大学生学习交友平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展,社交网络已经深入到人们生活的各个方面。大学生作为社会中活跃且具有强烈社交需求的群体,传统的交友方式已难以满足他们......
  • 基于java+SpringBoot+Vue的大学生就业招聘系统设计与实现
    项目运行环境配置:Jdk1.8+Tomcat7.0+Mysql+HBuilderX(Webstorm也行)+Eclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot+mybatis+Maven+mysql5.7或8.0等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个......
  • 基于java+SpringBoot+Vue的校园资料分享平台设计与实现
    项目运行环境配置:Jdk1.8+Tomcat7.0+Mysql+HBuilderX(Webstorm也行)+Eclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot+mybatis+Maven+mysql5.7或8.0等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个......
  • java计算机毕业设计大学生德育工程思想道德评价系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会的发展,高校对于大学生的思想道德教育日益重视。德育作为高校立德树人根本任务的重要支撑,其评价体系在整个教育环节中起到关键的导向作用......