day55 动态规划part12 代码随想录算法训练营 309. 买卖股票的最佳时机含冷冻期
题目:309. 买卖股票的最佳时机含冷冻期
我的感悟:
- 网友讲的更好,更好理解。
理解难点:
- 冷冻期是i-2
- 初始化dp【1】【0】是买入的用的最小消耗,max(-prices[0],-prices[1])
听课笔记:
- 听不懂,可以借鉴的是:卖的状态可以进一步拆分
我的代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices)==1:
return 0
# 持有 dp[i][0] 表示持有
# 不持有dp[i][1] 表示不持有,已卖出
dp = [[0]*2 for _ in range(len(prices))]
# 初始化
dp[0][0] = -prices[0]
dp[0][1] = 0 # 第0天,买入并卖出,收益0
dp[1][0] = max(0-prices[0],0-prices[1]) # 要么今天买,要么昨天买,取最大
dp[1][1] = max(0,prices[1]-prices[0])# 要么没买,要么昨天买,今天卖
# 递推公式
for i in range(2,len(prices)):
dp[i][0] = max(dp[i-1][0],dp[i-2][1]-prices[i]) # 要么沿用昨天,要么过了冷冻期后买
dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i])
return dp[-1][1]
通过截图:
老师代码:
扩展写法:
网友资料:
老师的资料:
309.最佳买卖股票时机含冷冻期
本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰