LeetCode刷题 最佳时机 I

LeetCode上买卖的最佳时机,记录下解题思路
假设股票价格数组为[7,2,5,1,3,6,4],要获取怎么卖出利润最大。
我们可以知道,当天利润最大的值,必须是他前几天最低点买入,然后当天卖出,才能获取最大利润

价格数组                 7   2   5   1   3   6   4
在当前天之前最小的价格    7   2   2   2   1   1   1
如果当天卖出最大利润为    0   0   3   0   2   5   3
能获取的最大利润为        0   0   3   3   3   5   3

在这个能获取的最大利润数组中,最大值5,就是这个价格数组内能获取的最大利润。
那么需要做到

  1. 获取当前天之前最小的买入价格
  2. 每次循环都获取当天能获得的最大利润
  3. 和之前保存的最大利润相比,比这个大就更新,小就跳过。
var maxProfit = function(prices) {
  // 如果价格天数只有1天/0天就返回0
  if(prices.length < 2) return 0
  // 保存当前天数左边的最小值,当前是第二天的话就是默认设置第一天
  let min = prices[0]
  // 保存当前的最大利润
  let max = 0
  for(let i = 1; i < prices.length; i++) {
      // 当前价格是否小于最低价格
      if(prices[i] < min) {
        min = prices[i]
      } else if(prices[i] - min > max){
        // 如果当前价格减左边最小价格大于我们之前保存的最大价格
        // 那么最大价格就更新
        max = prices[i] - min
      }
  }
  // 循环结束返回最后的结果
  return max
};

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