给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
什么是最大连续子列和?
子列是给定序列{ -2, 11, -4, 13, -5, -2 }中随机抽取某些数组成的新序列,如{ -2, 11, 13, -2 }就是给定序列的子序列, 而连续子序列即{ -2, 11, -4, 13} ,中间不断开,是连续的。(PS:子序列必须按照给定序列的顺序进行排列,不能乱放) 由此,我们就可以知道什么是最大的连续子序列的和,即最大连续子列和了。
然而,我们并不确定什么时候才是最大的连续子列和(max_sum)
所以每做一次加法应该将这次的和存起来(this_sum)
每一次循环都做比较,如果this_sum>max_sum
则赋值给max_sum,直到所有元素都被运算过。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int arr[n];
for(int i=0;i<n;i++)
{
cin >> arr[i];
}
int this_sum=0,max_sum=0;
for(int i=0; i<n; i++)
{
this_sum += arr[i];
if(this_sum>max_sum)
{
max_sum = this_sum;
}
if(this_sum<0)
{
this_sum = 0;
}
}
cout << max_sum<<endl;
return 0;
}