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)。
我昨天想到这个算法的一点头绪,但是没注意保存最大值,导致没再继续往下想,尴尬。