方法一:暴力法
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
int max=0;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++){
if(prices[j]-prices[i]>max)
max=prices[j]-prices[i];
}
return max;
}
};
复杂度分析
时间复杂度: O(n 2 ),空间复杂度:O(1)
方法二:动态规划
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
if(prices.size()<2)
return res;
vector<int> dp(n);
dp[0]=prices[0]; //dp数组保存前面出现的最小值
for(int i=1;i<prices.size();i++){
res=max(res,prices[i]-dp[i]);
dp[i]=min(prices[i],dp[i-1]);
}
return res;
}
};
优化空间
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0; //最大盈利
if(prices.size()<2)
return res;
int minprice=prices[0]; //前面出现的最小价格
for(int i=1;i<prices.size();i++){
res=max(res,prices[i]-minprice); //最大盈利
minprice=min(prices[i],minprice); //更新最小值
}
return res;
}
};