题目意思大概是给出连续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); } };