参考题解中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])
京公网安备 11010502036488号