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

思路

很容易想到DP的解法,所以考虑优化

显然当前的状态只和前一个小时的状态,或隔一个小时之前的状态有关,所以并不需要数组实现,只需要保存三个变量就可以

一个变量用于保存两个小时前的状态,剩下两个变量用于表示一个小时前的状态,按顺序更新就可以实现

Solutions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
int n = (int)energyDrinkA.size();
long long A = energyDrinkA[0], B = energyDrinkB[0], Z = 0;

for (int i = 1; i < n; ++i) {
long long a = max(A, Z) + energyDrinkA[i];
long long b = max(B, Z) + energyDrinkB[i];
long long z = max(A, B);
A = a, B = b, Z = z;
}

return max(A, B);
}
};
时间复杂度:O(N)
空间复杂度:O(1)