这几个题都是一样的套路,就是看好每天的状态,对其进行更新,保证每种操作都使得你的钱包里面钱最多。
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int hold1 = INT_MIN, hold2 = INT_MIN;//注意这个初始化,以及后面先是第二次卖 第二次买 第一次卖 第一次买 这样就可以在for循环时担心第一天就有卖第二次和第一次
int release1 = 0, release2 = 0;
for(int i:prices){ // Assume we only have 0 money at first
release2 = max(release2, hold2+i); // The maximum if we've just sold 2nd stock so far.
hold2 = max(hold2, release1-i); // The maximum if we've just buy 2nd stock so far.
release1 = max(release1, hold1+i); // The maximum if we've just sold 1nd stock so far.
hold1 = max(hold1, -i); // The maximum if we've just buy 1st stock so far.
}
return release2; ///Since release1 is initiated as 0, so release2 will always higher than release1.
}
};