LeetCode刷题 最佳时间II

LeetCode上最佳时机 II,记录下解题思路
其实就是计算整个数组中间每个高点和低点之间的收益。
可以通过价格走势来确定,如果是一直上涨的阶段就是每天的价格比后一天低,这里要处理边界问题,就是prices[i] >= prices[i + 1],用大于等于是因为如果在上涨趋势中间出现平稳的一天的情况也要计算到上涨阶段,然后再看第三天来确认是下跌还是上涨,如此下跌也是同样。
这里的for循环不设置i自增,主要靠两个while循环来让i增加,就是每当出现最小值的时候就跳出while,那么i就是当前i。
这里两个while循环不能交换位置,因为是先出现最小值,后出现最大值,然后在相减返回最后的总利润

var maxProfit = function(prices) {
  if(prices.length === 0) return prices[0]  
  // 保存最大最小值
  let min = 0
  let max = 0
  // 返回的收益
  let res = 0
  let len = prices.length-1
  for(let i=0; i= prices[i + 1]) {
      i++
    }
    // 跌到最后就是最小值
    min = prices[i]
    // 如果后一天的价格比前一天高,那么就是上涨趋势
    while(prices[i] <= prices[i + 1]) {
      i++
    }
    // 涨到最后就是最大值
    max = prices[i]
    res += max - min 
  }
  return res
};

你可能感兴趣的:(LeetCode刷题 最佳时间II)