309. 最佳买卖股票时机含冷冻期-Python
参考题解中https://leetcode-cn.com/u/jin-ai-yi/
以下是python版本加详细注释,备忘一下。
class Solution: def maxProfit(self, prices: List[int]) -> int: """ dp[i][0]:第i天不持有股票,且当天没卖出 dp[i][1]:第i天不持有股票,当天卖出了 dp[i][2]: 第i天持有股票 状态转移: "0"状态下,要么是昨天就没有股票,要么是昨天有股票,但是卖出了: dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]) "1"状态下,有股票卖,显然是昨天手上持股,今天的状态只考虑卖出就行了: dp[i][1] = dp[i][2] + prices[i] "2"状态下,有股票,可能是当天卖的,且前一天不能是状态1,不然就是冷冻期,也可能是前一天就持股,当天不卖出: dp[i][2] = max(dp[i][0] - prices[i], dp[i][2]) """ if not prices: return 0 dp = [[0, 0, 0] for i in range(len(prices))] dp[0] = [0, 0, -prices[0]] for i in range(1, len(prices)): dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]) dp[i][1] = dp[i - 1][2] + prices[i] dp[i][2] = max(dp[i - 1][0] - prices[i], dp[i - 1][2]) return max(dp[-1])