题目大概是这样的:已知一段时间内股价有涨跌,例如 {2,3,9,3,8,5,12}.求最大获利是多少。不能买空卖空,手里至多只能有一支股票。
思路:将数组分为两部分,分别求两部分的最大收益。
//小米笔试第2题,两次买进卖出股票使得收益最大
#include <iostream>
using namespace std;
//得到股票begin-end中买进卖出最大的收益
int getArrMax(int arr[],int begin,int end)
{
if(begin>=end)
return 0;
int Min=arr[begin];//记录最小值
int MaxDif=0;
for(int i=begin+1;i<=end;i++)
{
if(arr[i]<Min)
{
Min=arr[i];
}
if(arr[i]-Min>MaxDif)
{
MaxDif=arr[i]-Min;
}
}
return MaxDif;
}
int main()
{
int Max;
int shares[100];
int i=0;
while(cin>>shares[i])
{
i++;
}
int m1=0;
int m2=0;
for(int j=1;j<i-1;j++)
{
m1=getArrMax(shares,0,j);
m2=getArrMax(shares,j,i-1);
Max=max(Max,m1+m2);
}
cout<<Max<<endl;
return 0;
}