问题描述:给定一个数组大小为k,求这个数组中最大的连续序列的和。
输入样例:
6
-2 11 -4 13 -5 -2输出样例
20
输入样例和输出样例解释:输入k表示数组大小,然后输入数组中k个整数。输出为11,-4,13的和。
思路:设定目前序列和sum和最大序列和max,最初都设置为0。当出现sum为负数时,将sum重置为0,然后从下一个元素开始重新开始加,每当sum>max,就将sum赋值给max。这样时间复杂度是O(n)。
#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
int n[MAX];
int main()
{
int k;
int sum = 0, max = 0;
int flag = 0;
cin >> k;
for (int i = 0; i < k; i++)//判断是否全为负数
{
cin >> n[i];
if (n[i] >= 0)
flag = 1;
}
if (flag == 0)//如果全为负数
sum = 0;
else {
for (int i = 0; i < k; i++)
{
sum += n[i];
if (sum > 0)
{
if (sum > max)
max = sum;
}
else sum = 0;
}
}
cout << max;
}