class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
f = [0,-prices[0]]#不持股,持股
for i in range(2,len(prices)+1):
f[0] = max(f[0],f[1]+prices[i-1]-fee)#不持股的状态:i不持股,i-1买入i卖出
f[1] = max(f[1],f[0]-prices[i-1])#持股的状态:i持股,i-1不持股i买入
return f[0]
还是动态规划的思想
初始化的-prices[0]为买入股票时花掉的钱,所以为负
每次进行i这一天的不持股或持股的计算,相当于是对前一天的买入或卖出反悔,找到f[0]不持股时手里钱最多和f[1]持股时手里钱最多的状态
最后肯定是不持股时钱最多,返回f[0]
这类股票问题的核心公式就是
前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}