# DP
# dp[i][1]: i 天持有股票获得的最大利润,dp[i][0] i 天不持有股票的最大利润
# dp[i][1] = max(dp[i-1][1], -prices[i]), 这里是首次买入(本题只能买卖一次!!)
# dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])
# 初始化 dp = 0
dp = [[0, 0] for _ in range(len(prices))]
dp[0][0] = 0
dp[0][1] = -prices[0]
for i in range(1, len(prices)):
dp[i][1] = max(dp[i-1][1], -prices[i])
dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])
return dp[-1][0]
注意!!!
- 初始化: [0,0] 表示最大利润为 0,第一天买入股票,则dp 值为 -prices[0]
- 转移方程:max(持续不持有,当天买入-prices[i]); max(持续持有,当天卖出+prices[i])