309. 买卖股票的最佳时机含冷冻期llllll
冷冻期算单独一种情况:1.今天持有(已有or今天买)2.已经卖出3.今天卖出4.冷冻期
在最后一天的所有卖出状态中找最大值,包括冷冻期
class Solution:def maxProfit(self, prices: List[int]) -> int:n=len(prices)if n<2:return 0dp=[[0]*4 for _ in range(n)]dp[0][0]=-prices[0]for i in range(1,n):dp[i][0]=max(dp[i-1][0],max(dp[i-1][3],dp[i-1][1])-prices[i])dp[i][1]=max(dp[i-1][1],dp[i-1][3])dp[i][2]=dp[i-1][0]+prices[i]dp[i][3]=dp[i-1][2]return max(dp[-1][1],dp[-1][2],dp[-1][3])
714. 买卖股票的最佳时机含手续费
和之前的做法一样 只是减了个fee 这样要求maxdp[-1]
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:n=len(prices)dp=[[0]*2 for _ in range(n)]dp[0][0]=-prices[0]for i in range(1,n):dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i])dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee)return max(dp[-1])
总结:
感觉都是列个表格 每天的所有状态列出来 然后根据头一天去推算
基本掌握那个k次交易 和 冷冻期 就掌握特殊情况了