实现思路
存储了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)