Medium
这道和之前做的动态规划题稍微有点不太一样,之前做的一些题题,有的两个状态就是横坐标和纵坐标,比如,不同路径
dp
数组
dp[i][0]
表示第i
天,未持有状态的最大利润dp[i][1]
表示第i
天,持有状态的最大利润dp[i][2]
表示第i
天,冻结状态的最大利润dp[i][0] = max(dp[i-1][0], dp[i-1][2])
dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])
dp[i][2] = dp[i-1][1] + prices[i]
以上,尝试写一下代码,AC!
python3
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices) is 0:
return 0
#三种状态
#0:表示未持有股票状态
#1:表示持有股票状态
#2: 表示被冻结状态
dp = [[-math.inf for _ in range(3)] for _ in range(len(prices))]
dp[0][0] = 0
dp[0][1] = -prices[0]
dp[0][2] = 0
for i in range(1,len(prices)):
dp[i][0] = max(dp[i-1][0], dp[i-1][2])
dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])
dp[i][2] = dp[i-1][1] + prices[i]
return max(dp[-1])