https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/
本身有三种状态:buy, sell, rest. 但是rest[i] = sell[i - 1]所以rest省略。
这是状态转移方程。因为当前状态i只与i - 1和i - 2有关,因此可以进一步压缩成O(1)的空间复杂度。
buy[i] = max(sell[i-2]-price, buy[i-1])
sell[i] = max(buy[i-1]+price, sell[i-1])
public class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length < 2) {
return 0;
}
int prev_buy = 0;
int buy = Integer.MIN_VALUE;
int prev_sell = 0;
int sell = 0;
for (int price : prices) {
prev_buy = buy;
buy = Math.max(prev_sell - price, prev_buy);
prev_sell = sell;
sell = Math.max(prev_buy + price, prev_sell);
}
return sell;
}
}