sujet
Solution : (Boucle de force associée NO.53 Pour cette question, veuillez consulter mon article récapitulatif associé )
Méthode de programmation dynamique : tableau dp[i] quel est le bénéfice maximum de la vente au jour
i Équation de transition d'état : bénéfice maximum de la vente au jour i = max (bénéfice maximum au jour i-1, bénéfice maximum au jour i-1 Bénéfice + différence de prix entre le jour i et le jour i-1)
dp[0] = 0
dp[i] = max( dp[i-1] , dp[i-1] + (prix[i] - prix[i-1] ) )
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 动态规划方法:dp[i]表第i天卖出的最大利润是多少
# dp[0] = 0
# 状态转移方程:第i天卖出 的最大利润 = max (第i-1天的最大利润 , 第i-1天的最大利润 + 第i天和第i-1天的价格差)
# dp[i] = max( dp[i-1] , dp[i-1] + ( prices[i] - prices[i-1]) )
max_profit = 0
length = len(prices)
price_diff = 0
dp = [0]*length # 显然此时 dp[0] = 0
for i in range(1,length):
# 计算利润差
price_diff = prices[i] - prices[i-1]
# 状态转移方程
dp[i] = max(dp[i],dp[i-1]+price_diff) # dp[i]在没有被赋值前的值就是0(前边定义过)
# dp[i] = max(0,dp[i-1]+price_diff) 改成0也正确
max_profit = max(dp[i],max_profit)
return max_profit
Code de référence : ( la solution de référence est la solution supérieure dans la zone de commentaire de la solution de lien )