LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee
Solution1:
参考网址:http://www.cnblogs.com/grandyang/p/7776979.html
sold[i]
s
o
l
d
[
i
]
表示第
i
i
天卖掉股票此时的最大利润,表示第
i
i
天保留手里的股票此时的最大利润。那么我们来分析递推公式,在第天,如果我们要卖掉手中的股票,那么此时我们的总利润应该是前一天手里有股票的利润(不然没股票卖毛啊),加上此时的卖出价格,减去交易费得到的利润总值,跟前一天卖出的利润相比,取其中较大值,如果前一天卖出的利润较大,那么我们就前一天卖了,不留到今天了。然后来看如果第
i
i
天不卖的利润,就是昨天股票卖了的利润然后今天再买入股票,得减去今天的价格,得到的值和昨天股票保留时的利润相比,取其中的较大值,如果昨天保留股票的利润大,那么我们就继续保留到今天,所以递推时可以得到:
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int cash = 0, hold = -prices[0];//cash与hold分别是无与有股票时的收益
for (int i = 1; i < prices.size(); i++) {
cash = max(cash, hold + prices[i] - fee);//通过从hold卖掉股票更新cash
hold = max(hold, cash - prices[i]);//通过从cash买入股票更新hold
}
return cash;
}
};