309. Best Time to Buy and Sell Stock with Cooldown
Input: [1,2,3,0,2]
Output: 3
Explanation: transactions = [buy, sell, cooldown, buy, sell]// Dynamic Programming
int maxProfit(vector<int>& prices) { // time: O(n); space: O(n)
int n = prices.size();
if (n <= 1) return 0;
vector<int> buy(n, numeric_limits<int>::min()), sell(n, 0);
for (int i = 0; i < n; ++i) {
buy[i] = max((i >= 1 ? buy[i - 1] : numeric_limits<int>::min()), (i >= 2 ? sell[i - 2] : 0) - prices[i]);
sell[i] = max((i >= 1 ? sell[i - 1] : 0), (i >= 1 ? buy[i - 1] + prices[i] : 0));
// cout << "buy[" << i << "] = " << buy[i] << ", sell[" << i << "] = " << sell[i] << endl;
}
return sell.back();
}Last updated