从每一天价格处一分为二,分别计算之前与之后能获得的最大收益,如果比已知最大收益大则更新。如果计算到发现后半部分最大收益为0,可结束循环,说明之后股价一路跌。
-
class Solution {
-
public:
-
int maxProfit(vector<int> &prices) {
-
// Start typing your C/C++ solution below
-
// DO NOT write int main() function
-
if(prices.size()<2) return 0;
-
int re=0;
-
int min1=prices[0];
-
int profit1=0;
-
int min2=prices[0];
-
int profit2=0;
-
-
for(int i=0;i<prices.size();i++)
-
{
-
if(prices[i]<min1) {min1=prices[i];continue;}
-
if(prices[i]-min1>profit1) profit1=prices[i]-min1;
-
min2=prices[i];
-
profit2=0;
-
for(int j=i; j<prices.size();j++)
-
{
-
if(prices[j]<min2) {min2=prices[j];continue;}
-
if(prices[j]-min2>profit2) profit2=prices[j]-min2;
-
}
-
if(0==profit2) break;
-
if(profit1+profit2>re) re=profit1+profit2;
-
}
-
return re;
-
}
-
};
阅读(104) | 评论(0) | 转发(0) |