7-2 最大子段和 (40 分)
 

 

给定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;

int MaxSum(int n, int *a){
    int sum = 0, b = 0;
    for (int i = 1; i <= n; i++){
        if (b > 0){
            b += a[i];
        }
        else b = a[i];
        if (b > sum){
            sum = b;
        }
        
    }
    return sum;
}
int main(){
    int n;
    cin >> n;
    int a[10000];
    for (int i = 1; i <= n; i++){
        cin >> a[i];
    }
    cout << MaxSum(n, a);
}

 

  时间空间复杂度都是O(n)

  看了书上的代码,受益良多,故能打出此代码。下次争取完全由自己打出代码=。=

 

posted on 2019-10-20 22:26  PeterLuoN  阅读(159)  评论(0编辑  收藏  举报