3259. 超级饮料的最大强化能量
力扣刷题记录
动态规划
3259. 超级饮料的最大强化能量
思路
这题先进行模拟,发现还是存在一些问题
看了题解之后使用动态规划求解问题
每一次求解,都和前一次的选择有关,是否进行选择
定义三个常量,滚动遍历一轮即可计算
代码
class Solution:
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
# 不同的起点
# startA, startB = energyDrinkA[0], energyDrinkB[0]
# n = len(energyDrinkA)
# def cal(flag, res):
# i = 1
# while i < n - 1:
# print(i)
# if flag == 'A':
# if energyDrinkA[i] >= energyDrinkB[i+1]:
# res += energyDrinkA[i]
# if i + 1 == n - 1:
# res += energyDrinkA[i + 1]
# else:
# res += energyDrinkB[i+1]
# i = i + 1
# flag = 'B'
# else:
# if energyDrinkB[i] >= energyDrinkA[i+1]:
# res += energyDrinkB[i]
# if i + 1 == n - 1:
# res += energyDrinkB[i + 1]
# else:
# res += energyDrinkA[i+1]
# i = i + 1
# flag = 'A'
# i += 1
# return res
# startA = cal('A', energyDrinkA[0])
# startB = cal('B', energyDrinkB[0])
# print(startA)
# print(startB)
# sumA = sum(energyDrinkA)
# sumB = sum(energyDrinkB)
# return max(max(max(startA, startB), sumA), sumB)
dp = [0] * 3
n = len(energyDrinkA)
for i in range(n):
dp[0] = max(dp[0] + energyDrinkA[i], dp[1])
dp[1] = max(dp[1] + energyDrinkB[i], dp[2])
dp[2] = dp[0]
return max(dp[0], dp[1])
时间复杂度:O(n)
空间复杂度:O(1)