标签:
最大连续子序列
输出区间首元素,尾元素。若所有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 }
标签:
原文地址:http://www.cnblogs.com/a1225234/p/5003598.html