整个调试过程花了好久,还是在参考别人答案的情况下。好吧,牙疼,昨夜没怎么睡觉,状态不佳。
采用动态规划的方法,时间复杂度为O(n)就搞定了,动态规划的核心似乎是备忘录。不过和诗辉讨论认为这个似乎并不是动态规划。
class Solution {
public:
int maxProfit(vector<int> &prices) {
if(prices.size()<2) return 0;
vector<int> profit;
int low=prices[0];
int m=0;
int maxPro=0;
profit.push_back(0);
for(int i=1;i<prices.size();i++){
if(prices[i]-low>m) m=prices[i]-low;
profit.push_back(m);
if(prices[i]<low) low=prices[i];
}
int high=prices.back();
maxPro=profit.back();
m=0;
for(int i=prices.size()-2;i>=0;i--){
if(high-prices[i]>m) m=high-prices[i];
profit[i]+=m;
if(prices[i]>high) high=prices[i];
if(profit[i] > maxPro) maxPro=profit[i];
}
return maxPro;
}
};