Task6:买卖股票的最佳时机 III

题目

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解题

from typing import List
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        size = len(prices)
        if size < 2:
            return 0

        dp = [0 for _ in range(5)]
        dp[0] = 0
        dp[1] = -prices[0]

        dp[3] = float('-inf')

        # dp[j]:i 表示 [0, i] 区间里,状态为 j 的最大收益
        # j = 0:什么都不操作
        # j = 1:第 1 次买入一支股票
        # j = 2:第 1 次卖出一支股票
        # j = 3:第 2 次买入一支股票
        # j = 4:第 2 次卖出一支股票

        for i in range(1, size):
            dp[0] = 0
            dp[1] = max(dp[1], - prices[i])
            dp[2] = max(dp[2], dp[1] + prices[i])
            dp[3] = max(dp[3], dp[2] - prices[i])
            dp[4] = max(dp[4], dp[3] + prices[i])
        return max(0, dp[2], dp[4])
发布了5 篇原创文章 · 获赞 0 · 访问量 106

猜你喜欢

转载自blog.csdn.net/weixin_43535441/article/details/104707112
今日推荐