题目:
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
思路:
通过暴力循环,能解题,但用时过长
class Solution {
public:
int maxProfit(vector<int>& prices)
{
if(prices.size()<=1)
return 0;
int i,j,b1=prices[0],b2=prices[prices.size()-1],a=0;
for(i=0;i<prices.size()-1;i++)
{
if(prices[i]>=b1&&i!=0)
continue;
else
b1=prices[i];
for(j=prices.size()-1;j>i;j--)
{
if(prices[j]<=b2&&j!=prices.size()-1)
continue;
else
b2=prices[j];
if(prices[j]-prices[i]>a)
a=prices[j]-prices[i];
int b3=i+1;
for(int m=i+1;m<j-1;m++)
{
if(prices[m]<=b3&&m!=i+1)
continue;
else
b3=prices[m];
int n=m+1;
while(n<j){
if(prices[j]-prices[n]-prices[i]+prices[m]>a)
a=prices[j]-prices[n]-prices[i]+prices[m];
n++;
} } } }
return a;
}};
看了别人的解答,学到了新的东西
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int a=prices.size();
if(a<=1)
return 0;
vector<int> f(a,0);
int b=0;
int pmin=prices[0];
int pmax=prices[a-1];
for(int i=1;i<a;i++)
{
f[i]=max(f[i-1],prices[i]-pmin);
pmin=min(pmin,prices[i]);
}
int c=f[a-1];
for(int i=a-2;i>=0;i--)
{
b=max(b,pmax-prices[i]);
c=max(c,f[i]+b);
pmax=max(pmax,prices[i]);
}
return c; }};