My way
一开始审题失误了,没有看到股票可以 多次买入,卖出。
所以想了个 只准单次买入,卖出的解法。
1 | class Solution { |
官方解
通过第\(i\)天和\(i-1\)天\(cash,\ hold\)的递推关系,来得到最后最大收益。
*但是给我的感觉,这个思路,并不是很好捋清楚。
状态定义:
\[ \begin{align*} & cash:\ 不持有股票时的最大利润 \\ & hold:\ 持有股票时的最大利润\\ \end{align*} \]
状态转移方程:
1 | cash = Math.max(cash, hold + prices[i] - fee); // max(原来请况,假设第i天卖出股票) |
Base case
1 | cash = 0; |
1 | class Solution { |
e.g.
$$ \[\begin{align*} &输入: prices = [1, 3, 2, 8, 4, 9], fee = 2\\ &输出: 8\\ &解释: 能够达到的最大利润: \\ &在此处买入 prices[0] = 1\\ &在此处卖出 prices[3] = 8\\ &在此处买入 prices[4] = 4\\ &在此处卖出 prices[5] = 9\\ &总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8. \\ \end{align*}\] $$
prices | cash | hold | |
---|---|---|---|
0 | 1 | 0 | -1 |
1 | 3 | max(0, -1+3-2)=0 | max(0, 0-3)=-3 |
2 | 2 | max(0, -1+2-2)=0 | max(-1, 0-2)=-1 |
3 | 8 | max(0, -1+8-2)=5 | max(-1, 5-8)=-1 |
4 | 4 | max(5, -1+4-2)=5 | max(-1, 5-4)=1 |
5 | 9 | max(5, 1+9-2)=8 | max(1, 8-9)=-1 |