leetcode 309 股票买卖 冷冻期

状态主要分为两种,一种是天数,一种是是否持股以及是否处在冷冻期,这两种状态是复合的,要么持有,要么不持有不冷冻,要么不持有在冷冻。
所以设置dp数组,状态转移如下
dp[i][0]=max(dp[i-1][0],dp[i-1][2]-prices[i])
dp[i][2]=max(dp[i-1][1],dp[i-1][2])
dp[i][1]=dp[i-1][0]+prices[i]
其中处在冷冻期只有一种情况就是昨天持有,今天卖掉

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp=[[0 for _ in range(3)] for _ in range(len(prices))]
        dp[0][0]=-prices[0]
        dp[0][1]=float('-inf')
        dp[0][2]=0

        for i in range(1,len(prices)):
            dp[i][0]=max(dp[i-1][0],dp[i-1][2]-prices[i])
            dp[i][2]=max(dp[i-1][1],dp[i-1][2])
            dp[i][1]=dp[i-1][0]+prices[i]

        return max(dp[len(prices)-1][2],dp[len(prices)-1][1])

空间优化

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        onhand=-prices[0]
        nohand_cold=float('-inf')
        nohand_nocold=0

        for i in range(1,len(prices)):
           f0=max(onhand,nohand_nocold-prices[i])
           f1=onhand+prices[i]
           f2=max(nohand_cold,nohand_nocold)
           onhand=f0
           nohand_cold=f1
           nohand_nocold=f2


        return max(nohand_nocold,nohand_cold)
动态规划 文章被收录于专栏

给自己归纳复习的一些做过的题目,写得很乱,大家可以按照这个题目去针对性做题,确实会有提升!

全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务