leetcode 309. 最佳买卖股票时机含冷冻期

  1. 题目链接 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/

  2. 题目描述

    1. 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​

      设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

    2. 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
    3. 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
    4. 输入: [1,2,3,0,2]
      输出: 3 
      解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
  3. 解题思路

    1. 动态规划 dp[i][0] 表示第i天没有股票的状态下最大收益,dp[i][1]表示第i天有股票的情况下的最大收益,dp[i][2]表示第i天冻结的情况下的最大收益。
    2. 状态转移方程dp[i][0] = max(dp[i-1][0], dp[i-1][2]) \\ dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1])\\ dp[i][2] = dp[i-1][1] + prices[i]
  4. 代码

    1. python
      class Solution:
          def maxProfit(self, prices):
              if len(prices) <= 1:
                  return 0
              dp = [[0, 0, 0] for _ in range(len(prices))]
              dp[0] = [0, 0-prices[0], 0]
              for i in range(1, len(prices)):
                  dp[i][0] = max(dp[i-1][0], dp[i-1][2])
                  dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1])
                  dp[i][2] = dp[i-1][1] + prices[i]
              return max(dp[-1])

       

你可能感兴趣的:(刷题)