您的位置:首页 > 其它

Best Time to Buy and Sell Stock II

2016-07-19 10:55 375 查看
本题属于动态dp,

buy表示到目前i为止最后一个状态是买(有可能之前买的最近一直没卖,有可能是刚买的)

sell表示到目前i为止最后一个状态是卖(有可能之前卖了最近一直没买,有可能刚卖的)

注意一下两个递推公式:

                               buy=max(buy,sell-prices[i]);

                              sell=max(sell,buy+prices[i]); 

另外,要找到开始的buy和sell,当找到递增部分即可。

AC代码:


<pre name="code" class="cpp">class Solution {
public:
int maxProfit(vector<int>& prices) {
int buy=0,sell=0,j=0;
if(prices.size()>1){
//判断下初始的buy 和sell
for(;j<prices.size()-1;j++){
if(prices[j+1]>prices[j]){
buy=-prices[j];
sell=prices[j+1]-prices[j];
break;
}
}
for(int i=j+2;i<prices.size();i++){
buy=max(buy,sell-prices[i]);
sell=max(sell,buy+prices[i]);
}
}
return sell;
}
};


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: