原题链接:Leecode 121. 买卖股票的最佳时机
解法一:(该解法和 Leecode 42. 接雨水 双指针这道题的解法二思想一样)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
int m=prices.size();
int l=0,r=m-1;
int lm[m+1],rm[m+1];
lm[0]=prices[0];
for(int i=1;i<m;i++)
lm[i]=min(lm[i-1],prices[i]);
rm[m-1]=prices[m-1];
for(int i=m-2;i>=0;i--)
rm[i]=max(rm[i+1],prices[i]);
for(int i=0;i<m;i++)
res=max(res,rm[i]-lm[i]);
return res;
}
};
但这样写比较复杂,下面的解法更简单:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int m=prices.size();
int res=0,minp=prices[0];
for(int i=1;i<m;i++)
{
res=max(res,prices[i]-minp);
minp=min(minp,prices[i]);
}
return res;
}
};