我的js算法爬坑之旅-买卖股票的最佳时机 II

89 阅读1分钟

第三十二天:力扣第122题,买卖股票的最佳时机 II

地址:leetcode-cn.com/problems/be…

思路:首先确定的是每次只能持有一种股票,而且一天只能售出或者购买一种操作,所以我们可以把这题看作是找驼峰和驼谷,驼峰售出,驼谷购入,再考虑一下特殊情况就行了。

var maxProfit = function(prices) {
  let res = 0;
  let flag = 0;
  let left = 0;
  for(let i = 1; i < prices.length; i++)
  {
    if(prices[i - 1] >= prices[i]){
      if(flag === 1)//这里是驼峰,持有状态可以售出
      {
        res += prices[i - 1] - prices[left];
        flag = 0;
      }
    }
    else{
      if(flag === 0)//这里是驼谷,未持有状态可以购买
      {
        left = i - 1;
        flag = 1;//表示持有状态
      }
      if(i === prices.length - 1)//对最后一位的判断
      {
        res += prices[i] - prices[left];
      }
    }
  }
  return res;
};

执行用时:76 ms, 在所有 JavaScript 提交中击败了97.60%的用户

内存消耗:39.1 MB, 在所有 JavaScript 提交中击败了30.08%的用户

后来想想,想复杂了,只要第二天比前一天大就加上多出来的就行了

var maxProfit = function(prices) {
  let res = 0;
  for(let i = 1; i < prices.length; i++)
  {
    if(prices[i] > prices[i - 1])
    {
      res += prices[i] - prices[i - 1];
    }
  }
  return res;
};

再想想,直接使用reduce函数也可以

var maxProfit = function(prices) {
    return prices.reduce((p, v, i) => i === 0 || v < prices[i - 1] ? p : p + v - prices[i - 1], 0)
};