C++

    科技2022-07-13  146

    题目描述

           N 个整数组成的序列a[1],a[2],a[3], … ,a[n], 求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。 当所给的整数均为负数时输出0。

    例如:-2, 11, -4, 13, -5, -2, 最大的子段为:11, -4, 13,和为 20。

    输入描述

    输入共 2 行 第一行 一个正整数 n,代表序列的长度 第二行 n个整数,表示序列内的 n个整数

    数据范围

    0<n<=105 −10^7<=a[i]<=10^7

    输出描述

           输出一个整数,表示数组中最大的子段和

    输入样例

    1

    9 -2 1 -3 4 -1 2 1 -5 4

    2

    7 2 -4 3 -1 2 -4 3

    3

    5 -2 -5 -19 -6 -3

    输出样例

    1

    6

    2

    4

    3

    0

    思路

    数组-21-3……最大子段和

    第 i 项的最大子段和 = 前 i-1 项的最大子段和 + 第 i 项 或 第 i 项的最大子段和 = 第 i 项

    代码

    #include <iostream> using namespace std; int n,a; int maxn=0/*全是负数时输出0*/,maxx; int main(){ int i; cin>>n; //个数 cin>>a; //第一项 maxx=a; //第一项的最大子段和等于他本身 for(i=0;i<n-1;i++){ cin>>a; if(maxx+a>a) maxx+=a; //两种情况 else maxx=a; if(maxx>maxn) maxn=maxx; //打擂台,找出目前最大的最大子段和 } cout<<maxn; return 0; }

    bye bye~

    蒟蒻发声:有dalao有更好的方法吗?

    Processed: 0.011, SQL: 8