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

8.4买卖股票的最佳时机(LC122-M)_第1张图片

算法:

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

如何分解呢?

假如第 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])。

8.4买卖股票的最佳时机(LC122-M)_第2张图片

局部最优:

只收集正利润

全局最优:

把所有正利润加起来

正确代码:

class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for(int i=0; i

时间空间复杂度:

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

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


 

你可能感兴趣的:(#,8.贪心算法,算法)