题目简述:
购买一家股票,给若干股票不同时期预期价位,让你判断何时买何时抛可以获得最大收益。输入:各时期价位总数n以及每个价位。输出:最大收益以及买和投的时间(时期简单记为1-n)。
解题思路A:O(n)
考虑价位变化。由输入数据可以得到每次价位变化值a2-a1,并依次求和count,根据count是否为0把整个数组依次分为多个子数组,其中一个即为所求。
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 int n; 9 10 int main(){ 11 int l,r,a1,a2,b2,maxn,count; 12 bool bo; 13 while(~scanf("%d",&n)){ 14 maxn=count=0,bo=0; 15 scanf("%d",&a1); 16 for(int i=2;i<=n;i++){ 17 scanf("%d",&a2); 18 b2=a2-a1; 19 a1=a2; 20 count+=b2; 21 if(count<0){ 22 count=0; 23 bo=0; 24 }else{ 25 if(!bo){ 26 bo=1; 27 l=r=i; 28 } 29 if(maxn<count){ 30 maxn=count; 31 r=i; 32 } 33 } 34 } 35 printf("%d: %d~%d\n",maxn,l-1,r); 36 } 37 return 0; 38 }