算法練習(38):Best Time to Buy and Sell Stock with Transaction Fee

題意:給出一個股票多天的價格,可以有無數次成對的買入賣出,但每次有手續費。求所能獲得的最大利潤

思路與分析:這是一道動態規劃的問題,一共就有兩種狀態,當前持有股票以及沒有股票。我們可以用兩個變量(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;
	}
};


發佈了80 篇原創文章 · 獲贊 72 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章