https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/
- 只能做两次交易

随便拿两个上坡可能不是最优的结果
我一定要在i位置的时候,两次交易做完,并且最后一次交易的卖出时机在i位置

圆圈部分表示做完一次交易后并且减去一个买入价格的最优值,
也就是第二次的本钱提前减掉了
而且我要的是整体的最优,也就是他俩减完的最优
举个例子
来看不最优的例子
好了,那么来到i位置时就直接把i的值加到之前的信息就是两次交易的最优值了
接下来就是看这个信息怎么求了
初始化0位置 = -prices[0]
比如我是i位置,即将进入i+1位置,那么我怎么更新我的这个信息去给i+1用呢?
两种情况
1)第二次交易的买入时机不在i位置
那么0~i-1的最优就是0~i的最优
2)第二次交易的买入时机一定要在i位置
之前第一次交易的最优 - [ i ]
public int maxProfit(int[] prices) {int firstMax = 0;int firstMaxMinusBuy_Max = -prices[0];int ans = 0;int min = prices[0];for (int i = 1; i < prices.length; i++) {ans = Math.max(ans, firstMaxMinusBuy_Max + prices[i]);min = Math.min(min, prices[i]);firstMax = Math.max(firstMax, prices[i] - min);firstMaxMinusBuy_Max = Math.max(firstMaxMinusBuy_Max, firstMax - prices[i]);}return ans;}
