做法:DP
递推式:val[i] = max(val[i - 1] + price[i] - price[i - 1], global[i - 2]),
其中,val[i]表示第i天出售股票能够获取的最大利润;
global[i]记录了从第0~i天出售股票能够获得的最大利润;
公式的含义是,第i天出售的股票可能是之前买的,也可能是当天买的;
之前买的,可以看成是昨天出售的股票花钱买回来,加上今天的股价一起卖,即val[i - 1] - price[i - 1] + price[i];
当天买的,即global[i - 2],因为,昨天(i-1天)需要冷却。
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.size() == 0)
return 0;
int global1 = 0, global2 = 0, val = 0;
for (int i = 1; i < prices.size(); i++) {
val = max(val + prices[i] - prices[i - 1], global1);
global1 = global2;
global2 = max(val, global2);
}
return global2;
}
};