《Leetcode of December》121. 买卖股票的最佳时机

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n == 0: return 0 # 边界条件
        dp = [0] * n
        minprice = prices[0] 

        for i in range(1, n):
            #更新最小价格
            minprice = min(minprice, prices[i])
            #更新第i天的最大利润
            dp[i] = max(dp[i - 1], prices[i] - minprice)

        return dp[-1]

  • 所谓最大的利润也就是再价格最低的时候买,在最高的时候卖出去
  • 如果这个数组是严格递减的,那么就不可能赚钱
  • 如果这个数组不是严格递减的,才有可能赚钱
    • 定义一个dp数组,初始化都是0
    • minprice初始化是第一天股票的价格
    • 更新最小的价格:当前的价格和最小价格的最小值
    • 然后比较i天的利润:max(前一天的利润,当前的价格-最低的价格)
    • dp[-1]是收益最大的那一天

总结:动态规划比较简单的一个题目,也是股票问题的第一个题目。 

猜你喜欢

转载自blog.csdn.net/weixin_37724529/article/details/111521173