在线处理求最大序列和
明天试试分治法,分治的话代码可能要难写一些原题
程序代码:
#include<stdio.h> int Compare(int CurArraySum,int MaxArraySum) { if( CurArraySum > MaxArraySum ) MaxArraySum=CurArraySum; return MaxArraySum; } int main() { int Array[100000]; int CurArraySum,MaxArraySum; int k,i; int book; //记录Array[]中负数的个数 book=0; CurArraySum=0; MaxArraySum=-9999999; scanf("%d",&k); for(i=0;i<k;i++) { scanf("%d",&Array[i]); } //在线处理,扫描下一个数与最大和比较,当前和为负数则不将当前和记录至下一个数,重置后扫描 for(i=0;i<k;i++) { if(Array[i]<0) book++; if( CurArraySum<0 ) { CurArraySum=0; CurArraySum+=Array[i];//重新扫描 MaxArraySum = Compare( CurArraySum , MaxArraySum ); } else { CurArraySum+=Array[i];//虽然第一项为负数时会将其包含进CurArraySum,但是后会被重置为0,即使只有一项由于book的记录也会输出0 MaxArraySum = Compare( CurArraySum , MaxArraySum ); } } if(book==k) printf("0\n"); else printf("%d\n",MaxArraySum); return 0; }