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;
}
};
本文探讨了在考虑交易费用的情况下,如何确定最佳的股票买卖时机以实现最大利润。使用动态规划方法,定义sold[i]为第i天卖出股票的最大利润,hold[i]为第i天持有股票的最大利润,并给出了相应的递推公式。
513

被折叠的 条评论
为什么被折叠?



