121. 买卖股票的最佳时机
- 最多只允许完成一笔交易
保存前面的最小值
class Solution {public int maxProfit(int[] prices) {int minPrice = Integer.MAX_VALUE;int res = 0;for(int price : prices){minPrice = Math.min(minPrice, price);res = Math.max(res, price - minPrice);}return res;}}
122. 买卖股票的最佳时机 II
可以尽可能地完成更多的交易
- 交易的分解
- 如果相隔的两天交易差值是正数,表示有收益则交易,如果是负数,则不交易,res+=0即可
- res += Math.max(0, prices[i + 1] - prices[i]);

class Solution {public int maxProfit(int[] prices) {int res = 0;for(int i = 0; i + 1 < prices.length; i++){res += Math.max(0, prices[i + 1] - prices[i]);}return res;}}
123. 买卖股票的最佳时机 III
最多可以完成 两笔 交易
- 前后缀分解
- 枚举第二次交易买入的时间,比如第i天
- 第一次交易[0, i - 1],第二次交易[i,n)两次交易完全独立,分别求出最大即可
- 后面一段求最大:用第一题的做法,第i天买的,记录下i+1~n-1中的最大值
