【LeetCode121】-买卖股票的时机

实现思路

存储了pmin数组,pmin[i]代表从0到i的最小值
存储了pmax数组,pmax[i]代表从i到n-1的最大值

以i为分界点,计算(i-1到n的最大值)- (0到i的最小值),取这些差值的最大值作为结果

实现代码

class Solution {
    
    
public:
    int maxProfit(vector<int>& prices) {
    
    
        int n=prices.size();
        int max=0;
        vector<int> pmin(n,prices[0]);
        vector<int> pmax(n,prices[n-1]);
        for(int i=1;i<n;i++){
    
    
            if(prices[i]<pmin[i-1]) pmin[i]=prices[i];
            else pmin[i]=pmin[i-1];
        }
        for(int i=n-2;i>=0;i--){
    
    
            if(prices[i]>pmax[i+1]) pmax[i]=prices[i];
            else pmax[i]=pmax[i+1];
        }
        for(int i=0;i<n-1;i++){
    
    
            if(pmax[i+1]-pmin[i]>max) max=pmax[i+1]-pmin[i];
        }
        return max;
    }
};

另一种Python的代码
在这里插入图片描述这种方法的时间复杂度为O(n),空间复杂度为O(1)

提交结果及分析


时间复杂度为O(n),空间复杂度O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/113799551