最佳时间买卖问题

题目

309. Best Time to Buy and Sell Stock with Cooldown

解法

1、假定三个状态buy, sell, cool,分别表示当前时刻有物品在手(buy),出售物品(sell),什么也不做(cool)。
2、
当前处于buy的情况有两种:上一个时刻处于buy状态,当前时刻仍然维持该状态;上一个时刻处于cool状态,当前时刻买入商品。
当前处于cool的情况两种:上一个时刻出售商品(sell),当前cool;上一个时刻为cool,当前仍为cool
当前处于sell的只有一种情况:上一个时刻为buy,当前sell
3、确定每个时刻各状态的最优值并保存。示意图如下所示。

流程图

代码如下

    def maxProfit(self, prices: List[int]) -> int:
        buy = float('-inf')
        cool = 0
        sell = 0
        for p in prices:
            buy = max(buy, cool-p)
            cool = max(cool, sell)
            sell = buy+p
        return max(cool, sell)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容