题目简述:

购买一家股票,给若干股票不同时期预期价位,让你判断何时买何时抛可以获得最大收益。输入:各时期价位总数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 }
View Code

相关文章: