题目描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试样例:
[10,22,5,75,65,80],6
返回:
87
- #include <iostream>
- using namespace std;
- 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;
- }