输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)

输入描述:

第一行为数组的长度N(N>=1)
接下来N行,每行一个数,代表数组的N个元素

输出描述:

最大和的结果

解题方法

dp[n]表示以数组元素a[n]为结尾的最大连续子数组;
故可知,dp[n]=max(dp[n-1]+a[n],a[n]);
最后找出dp数组中最大的那个即可。
###代码

#include <iostream>
using namespace std;

int max(int a,int b)
{
    return a>b? a : b;
}

int main()
{
    int n,x,maxc=INT32_MIN,tmp=0;
    cin>>n;
    while(n--)
    {
        cin>>x;
        tmp=max(tmp+x,x);
        maxc=max(tmp,maxc);
    }
    cout<<maxc<<endl;
    return 0;
}