思路

  1. 第一动态规划...画格子,当到第n天时,n-1天的利润最大值,然后判断第n天是否会有利润提升,如果有的话就更新利润最大值
  2. 因为觉得动态规划有点麻烦,更简单类似于滑动窗口的解法,最小利润为0,窗口内的股价最低值为min,右窗口不断遍历更新最大利润值以及窗口内股价最低值,这样遍历到最后就可以取得整个数据间的利润最大值了
class Solution {
    public int maxProfit(int[] prices) {
        if (prices.length <= 1) return 0;
        int profit = 0; // 最大利润
        int min = prices[0]; // 当前价格
        for (int i : prices) {
            // 更新窗口中的股价最低点
            min = Math.min(min,i);
	    // 更新利润最大值
            if ((i - min) > profit) profit = i-min; 
        }
        return profit;
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹