解题思路:
DP,只是存储的空间是O(1)
这个讨论区的答案
首先buy1点是第一次买入点,对于当前点数,只有一个点数的时候只能买入,有两个及以上的点数时可以选择买入当前点数或者不买入当前点数即还是使用之前的点数。
sell1是第一次售出点,对于 当前点数可以选择售出,或者不售出
buy2 sell2同理
题目限制只能有2笔交易,如果有3笔、4笔就依次加入buy3、sell3…即可
提交代码:
class Solution {
public int maxProfit(int[] prices) {
int buy1 = Integer.MIN_VALUE, sell1 = 0;
int buy2 = Integer.MIN_VALUE, sell2 = 0;
for (int i = 0; i < prices.length; i++) {
buy1 = Math.max(buy1, -1 * prices[i]);
sell1 = Math.max(sell1, prices[i] + buy1);
buy2 = Math.max(buy2, sell1 - prices[i]);
sell2 = Math.max(sell2, prices[i] + buy2);
}
return sell2;
}
}
运行结果: