Likou № 121 Лучшее время для покупки акций (метод динамического программирования)

тема

вставьте сюда описание изображения

Решение: (Сопутствующая силовая пряжка № 53. По этому вопросу, пожалуйста, проверьте мой соответствующий итоговый пост )

Метод динамического программирования: таблица dp[i] какова максимальная прибыль от продажи в день
i Уравнение перехода состояния: Максимальная прибыль от продажи в день i = max (максимальная прибыль в день i-1, максимальная прибыль в день i-1 Прибыль + разница в цене между днем ​​i и днем ​​i-1)
dp[0] = 0
dp[i] = max( dp[i-1] , dp[i-1] + ( цены[i] - цены[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

Справочный код: (Эталонное решение является верхним решением в области комментариев по ссылкам )
вставьте сюда описание изображения

рекомендация

отblog.csdn.net/qq_33489955/article/details/124224105