给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
输入格式:
输入有两行:
第一行是n值(1<=n<=10000);
第二行是n个整数。
输出格式:
输出最大子段和。
输入样例:
在这里给出一组输入。例如:
6
-2 11 -4 13 -5 -2
输出样例:
在这里给出相应的输出。例如:
20
#include<iostream>
using namespace std;
#define MAX 10005
int MaxSum(int *a,int n) {
int sum = 0,b = 0;
for(int j = 1; j <= n; ++j) {
if(b > 0)
b += a[j];
else
b=a[j];
if(b > sum)
sum = b;
}
return sum;
}
int main() {
int n;
int m;
int a[MAX];
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 1; i <= n; ++i)
if(a[i] >= 0) {
int result = MaxSum(a,n);
cout << result;
system("pause");
return 0;
}
cout << 0;
system("pause");
return 0;
}