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)
动态规划 文章被收录于专栏

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

全部评论

相关推荐

06-26 10:08
门头沟学院 C++
北京Golang实习,一个月4700,吃住都不报,公司位置在海淀。请问友友怎么看呢?如果要租房的话有什么建议吗
码农索隆:租房肯定是合租了,剩下的钱,差不多够正常吃饭了,看看能不能学到东西吧
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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