題目意思大概是給出連續n天的股價,做出以下限制:spa
交易次數不限。求能夠得到的最大利潤。code
根據題意,畫出DFA以下blog
天天能夠採起的動做有3種:it
初始狀態爲idle,手頭沒有任何股票,且能夠進行買入交易。io
若是當天或以前有買入動做,則狀態爲hold,持有股票。class
若是當天有賣出動做,則狀態變爲sold。手頭再也不持有股票,但也不能買入。im
至此,咱們能夠分別計算3種狀態下,採起不一樣的行動之後各個狀態的最大利潤。img
hold:di
前一天爲idle,當天買入,或者以前有買入動做,當天什麼也不作:時間
hold = max(idle - prices[i], hold);
idle:
idle能夠由以前的idle或sold狀態變化而來:
idle = max(idle, sold);
sold:
當天賣出,由hold狀態變化而來,注意,當天買入當天賣出是容許的。
sold = hold + prices[i];
最終代碼以下:
class Solution { public: int maxProfit(vector<int>& prices) { if(prices.empty() || prices.size() <= 1){ return 0; } int idle = 0, hold = -prices[0], sold = 0; for(int i = 1; i < prices.size(); i++){ hold = max(idle - prices[i], hold); idle = max(idle, sold); sold = hold + prices[i]; } return max(sold, idle); } };