Skip to content

122 买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

题解

这道题贪心算法可以解,最简单的是只要是正收益,就加上,否则不加。那么就是比较前一个和当前值的diff,如果大于0,算上,否则不算。

整体代码

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

    return total
}

同时我们还可以这么想,我们先买第一天的,如果后一天跌了,那么先卖出前一天,然后在买入今天的,如果涨了就不动,最后一天必须卖出。

javascript
var maxProfit = function (prices) {
    //核心逻辑是,先买第一天的,如果后面不跌,就不卖,如果后面跌了,卖出前面的。同时买入当天的,最后一天必须全部卖出
    let total = -prices[0]
    for (let i = 1; i < prices.length; i++) {
        if (prices[i] < prices[i - 1]) {
            //如果下跌,把昨天的卖了
            total += prices[i - 1]
            //再把今天的买入
            total -= prices[i]
        }
        //最后一天必须卖
        if (i === prices.length - 1) {
            total += prices[i]
        }
    }
    return total
};

上次更新于: