您的位置:首页 > 其它

309. Best Time to Buy and Sell Stock with Cooldown

2017-12-28 10:42 309 查看
1、题目描述

给一个数组表示股票的价格。不能在卖了股票的第二天直接买股票,需要冷静至少一天,问最大利润。

2、思路

用四个变量表示四个数值。

prebuy表示在前一天或更早做了买入时,利润的最大值;

buy表示在今天或更早做了买入时,利润的最大值,初始化为INT_MIN;

presell表示在前两天或更早做了卖出时,利润最大值,初始化为0;

sell表示在今天或更早做了卖出时,利润最大值,初始化为0;

对于今天来说,

prebuy = buy; //更新prebuy为昨天的buy

buy = max(buy, presell - price[i]); //今天可以买入的情况下,利润最大值,这时的presell其实还是两天前的sell值

presell = sell; //更新presell为昨天的sell

sell = max(sell,prebuy + price[i]); //今天可以卖出的情况下,利润最大值,这时的prebuy其实是一天前的buy值

3、代码

int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n==0)
return 0;
int buy=INT_MIN,prebuy;
int sell=0,presell=0;

for(int i=0;i<n;i++){
prebuy = buy;
buy = max(buy,presell-prices[i]);
presell = sell;
sell = max(prebuy+prices[i],sell);
}
return sell;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息