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

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

分析:

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

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

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

04-21 07:39