題意:給出一個股票多天的價格,可以有無數次成對的買入賣出,但每次有手續費。求所能獲得的最大利潤
思路與分析:這是一道動態規劃的問題,一共就有兩種狀態,當前持有股票以及沒有股票。我們可以用兩個變量(hold,cash)分別代表這兩個狀態下當前賺的最多的錢。所以在遍歷過程中有:cash=max{cash,hold+prices[i]-fee},hold=max{hold,cash-prices[i]}
代碼:
class Solution {
public://兩種狀態,一種是當前持有時的目前最大獲益,一種是當前不持有時的目前最大獲益
int maxProfit(vector<int>& prices, int fee) {
if (prices.size() == 0) return 0;
int hold = -prices[0], cash = 0;
for (int i = 1; i < prices.size(); i++) {
if (cash < hold + prices[i] - fee) cash = hold + prices[i] - fee;
if (cash - prices[i] > hold) hold = cash - prices[i];
}
return cash;
}
};