您好,欢迎来到品趣旅游知识分享网。
搜索
您的当前位置:首页力扣每日一题 3259. 超级饮料的最大强化能量

力扣每日一题 3259. 超级饮料的最大强化能量

来源:品趣旅游知识分享网

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

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

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

今天的题目又是一个动态规划;

将dpA[i]定义为最后第i个小时喝能量A的最大能量提升,如果我们只考虑前i+1个小时,那么在最后一个小时,我们喝能量饮料A。

可以得到状态转换方程 dpA[i] = max(dpA[i - 1], dpB[i - 2]) + energyDrinkA[i])

同理,我们可以定义一个dpB[i]。

那么,我们要的答案就是max(dpA[n - 1], dpB[n - 1])。

然后直接写就好了,时间复杂度O(n), 空间复杂度O(n)。

不过我们还可以再缩小一下空间,。不开数组。

class Solution {
public:
    long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
        long long preA = energyDrinkA[0];
        long long preB = energyDrinkB[0];
        int len = energyDrinkA.size();
        for (int i = 1; i < len; ++i)
        {
            long long tmpA = max(preA + energyDrinkA[i], preB);
            long long tmpB = max(preB + energyDrinkB[i], preA);            
            preA = tmpA;
            preB = tmpB;
        }
        return max(preA, preB);
    }
};

时间复杂度不变,还是O(n), 但空间复杂度O(1)。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务