买卖股票的最佳时机II

力扣122-买卖股票的最佳时机II (opens new window)

核心思想:在价格低时买入,找一个价格最高的时间卖出。

假如第一天买入,第三天卖出。则最终利润prices[3] - prices[1],看上去似乎还需要额外记录每天股票的价格来决定买入还是卖出。但是实际上这个利润的计算还可以看成这种形式:

(prices[3] - prices[2]) + (prices[2] - prices[1])

则问题实际上就变成了,计算相邻两天的股票的差价,把差值为正的结果累加就能得到最终结果了。代入该问题就是在差值为正的时候将股票卖出,那如果股票后面价格更高呢?简单,相当于当天把股票卖了又买回来,当天收支平衡。之后用后一天的价格减去买入那天的价格即可。这就是上面那个式子的实际含义。

那如果股票一直降价呢?直接不买入就可以了,具体到代码就是初始利润为0,只会累加正的差值。

var maxProfit = function(prices) {
    let res = 0
    //第一天没有利润
    for(let i = 1; i < prices.length; i++) {
        //只收集正的差值。
        res += Math.max(prices[i] - prices[i - 1], 0)
    }
    return res
};

代码很简单,但是思想还是有一些绕的!

上次更新:: 2023/5/3 14:12:37