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])
全部评论

相关推荐

狸猫换offer:神通广大的互联网
点赞 评论 收藏
分享
在喝茶的杨桃很郁闷:我简单喵两句: 1.如果不是实在没东西写不要写熟悉async await这些语法层面的东西 2.也不要写熟悉HTTP,因为http内容很多,稍微深挖一点你不会的话会让人有一种“原来你简历上面的东西都没有完全掌握”的感觉,容易给自己挖坑 3.自我评价可以删了 4.我在复习明天的面试,先mark,后面再回来继续建议
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务