算法一(动态规划):
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.size() < 2) return 0;
int maxProfit = 0;
int curMin = prices[0];
for (int i = 1; i < prices.size(); i++) {
curMin = curMin<prices[i]?curMin:prices[i];
maxProfit = maxProfit>(prices[i] - curMin)?maxProfit:(prices[i] - curMin);
}
return maxProfit;
}
};
算法二(暴力破解):
代码如下:
class Solution {
public:
int maxP(vector<int>& prices,int left,int right){
if(left==right)return 0;
int i=left,j=left,max,min;
max=min=prices[left];
for(int k=left;k<=right;++k){
if(min>prices[k]){min=prices[k];i=k;}
if(max<prices[k]){max=prices[k];j=k;}
}
if(i<=j)return max-min;
else{
int val1=maxP(prices,left,j);
int val2=maxP(prices,j+1,i-1);
int val3=maxP(prices,i,right);
int temp=val1>val2?val1:val2;
return (temp>val3?temp:val3);
}
}
int maxProfit(vector<int>& prices) {
if(prices.size()==0)return 0;
return maxP(prices,0,prices.size()-1);
}
};