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

参考题解中https://leetcode-cn.com/u/jin-ai-yi/
以下是python版本加详细注释,备忘一下。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        """
        dp[i][0]:第i天不持有股票,且当天没卖出
        dp[i][1]:第i天不持有股票,当天卖出了
        dp[i][2]: 第i天持有股票
        状态转移:
        "0"状态下,要么是昨天就没有股票,要么是昨天有股票,但是卖出了:
        dp[i][0] = max(dp[i - 1][1], dp[i - 1][0])

        "1"状态下,有股票卖,显然是昨天手上持股,今天的状态只考虑卖出就行了:
        dp[i][1] = dp[i][2] + prices[i]

        "2"状态下,有股票,可能是当天卖的,且前一天不能是状态1,不然就是冷冻期,也可能是前一天就持股,当天不卖出:
        dp[i][2] = max(dp[i][0] - prices[i], dp[i][2]) 
        """
        if not prices:
            return 0
        dp = [[0, 0, 0] for i in range(len(prices))]
        dp[0] = [0, 0, -prices[0]]
        for i in range(1, len(prices)):
            dp[i][0] = max(dp[i - 1][1], dp[i - 1][0])
            dp[i][1] = dp[i - 1][2] + prices[i]
            dp[i][2] = max(dp[i - 1][0] - prices[i], dp[i - 1][2])
        return max(dp[-1])
全部评论

相关推荐

东孝子_强东我偶像:你怎么当孝子都和我时间一样😭
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务