最大连续子列和

给定序列{ -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;
}

猜你喜欢

转载自blog.csdn.net/kedacpu/article/details/103060428