leecode第一百二十一题(买卖股票的最佳时机)

leecode第一百二十一题(买卖股票的最佳时机)

 

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len=prices.size();
        if(len<2)
            return 0;
        
        vector<int> max_num;//用来保存从第n天到第1天的,遍历到的最大值
        vector<int> min_num;//用来保存从第1天到第n天的,遍历到的最小值
        int min_cur=INT_MAX,max_cur=INT_MIN;
        for(int i=0;i<len;i++)
        {
            int j=len-1-i;
            if(prices[i]<min_cur)
                min_cur=prices[i];
            min_num.push_back(min_cur);
                
            if(prices[j]>max_cur)
                max_cur=prices[j];
            max_num.push_back(max_cur);
               
        }
        
        int lirun=0;
        for(int i=0;i<len-1;i++)//如果第i天后的最大值-第i天前的最小值>当前利润,赋值
        {
            if((max_num[len-1-i]-min_num[i])>lirun)
                lirun=max_num[len-1-i]-min_num[i];
        }
        
        return lirun;
    }
};

 分析:

就这我还想了半个小时呢,时间复杂度倒是不高,O(N)。但是空间复杂度高,也是O(N)。题解给了一种算法思路,能把空间复杂度降为O(1)。

leecode第一百二十一题(买卖股票的最佳时机)

我昨天想到这个算法的一点头绪,但是没注意保存最大值,导致没再继续往下想,尴尬。

上一篇:leecode第一题(两数之和)


下一篇:leecode第十六题(最接近的三数之和)