标签:Sell 309 Buy max sold rest 冷却 hold
一、题目说明
题目309. Best Time to Buy and Sell Stock with Cooldown,计算买卖股票的最大利润,卖出股票后第二天不能买入,需要冷却一天。
二、我的解答
这个题目,我没做出来。看了高手的解答,才知道用dp。
class Solution{
public:
//sold[i] = hold[i-1] + price[i];
//hold[i] = max(hold[i-1], rest[i-1] - price[i])
//rest[i] = max(rest[i-1], sold[i-1])
//最后一天max(sold,rest)
int maxProfit(vector<int>& prices){
int sold=0,rest=0,hold=INT_MIN;
for(int p: prices){
int pre_sold = sold;// sold[i-1]
sold = hold + p; //sold[i]
hold = max(hold,rest-p); // hold[i]
rest = max(rest,pre_sold);
}
return max(sold,rest);
}
};
性能如下:
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Best Time to Buy and Sell Stock with Cooldown.
Memory Usage: 8.7 MB, less than 55.56% of C++ online submissions for Best Time to Buy and Sell Stock with Cooldown.
三、优化措施
dp状态方程怎么来?
每一天有3个状态:
持有hold:可以是前一天买入的继续持有;或者前一天冷却今天买入,取其最大值。
max(hold[i-1], rest[i-1] - price[i])
卖出sold: 卖出是前一天持有量 + 卖出的价格
sold[i] = hold[i-1] + price[i]
冷却rest:前一天冷却今天继续冷却,或者前一天卖出今天冷却,取其最大值。
rest[i] = max(rest[i-1], sold[i-1])
标签:Sell,309,Buy,max,sold,rest,冷却,hold 来源: https://www.cnblogs.com/siweihz/p/12342916.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。