0
点赞
收藏
分享

微信扫一扫

力扣309买卖股票时机含冷冻期---python

guanguans 2022-02-07 阅读 59

题目描述:

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

示例 2:

提示:

1 <= prices.length <= 5000
0 <= prices[i] <= 1000

解题思路图:

注意:该题需要好好理解状态转化,比一般的题较难一些
在这里插入图片描述
AC代码:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp = [0, 0, 0]
        n = len(prices)
        dp[0] = -prices[0]
        for i in range(1, n):
            pre_buy, pre_sell = dp[0], dp[1]
            
            # 买入状态:之前已买入 or 今天买入
            # 买入状态表示保证今天之后是股票已经买入
            dp[0] = max(dp[0], dp[2]-prices[i])

            # 卖出状态:之前已卖出 or 今天卖出
            # 卖出状态表示保证今天之后是股票已经卖出
            dp[1] = max(dp[1], pre_buy+prices[i])

            # 冷冻期状态:
            dp[2] = pre_sell
        return max(dp[1], dp[2])
举报

相关推荐

0 条评论