8.4买卖股票的最佳时机(LC122-M)

发布时间:2024年01月22日

算法:

如果想到其实最终利润是可以分解的,那么本题就很容易了!

如何分解呢?

假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!

那么根据 prices 可以得到每天的利润序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])。

局部最优:

只收集正利润

全局最优:

把所有正利润加起来

正确代码:

class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for(int i=0; i<prices.length-1; i++){
            result += Math.max(prices[i+1]-prices[i],0);
        }
        return result;

    }
}

时间空间复杂度:

时间复杂度:O(n),其中 n 为数组的长度。我们只需要遍历一次数组即可。

空间复杂度:O(1)。只需要常数空间存放若干变量。


?

文章来源:https://blog.csdn.net/m0_50696252/article/details/135751269
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。