首页 > 其他 > 详细

序列问题(续)

时间:2015-11-28 23:12:46      阅读:296      评论:0      收藏:0      [点我收藏+]

最大连续子序列

输出区间首元素,尾元素。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。 时间复杂度O(n),前缀和则为O(n^2)

技术分享
 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 #define Max 10000+10
 5 int main()
 6 {
 7     int n,s,e,sum,sumMax,S,E;
 8     int a[Max];
 9     int i,j;
10     freopen("in.txt","r",stdin);
11     while(scanf("%d",&n)==1&&n)
12     {
13         sum=0;
14         sumMax=-1;
15         for(i=0;i<n;i++)
16             scanf("%d",&a[i]);
17         s=a[0];
18         S=a[0];
19         for(i=0;i<n;i++)
20         {
21             sum+=a[i];
22             if(sum>sumMax)
23             {
24                 sumMax=sum;
25                 S=s;
26                 E=a[i];
27             }
28             else if(sum<0)
29             {
30                 sum=0;
31                 s=a[i+1];
32             }
33         }
34         if(sumMax<0)    {sumMax=0,S=a[0],E=a[n-1];}
35         printf("%d %d %d\n",sumMax,S,E);
36     }
37 }
View Code

 

序列问题(续)

原文:http://www.cnblogs.com/a1225234/p/5003598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!