输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为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;
} 
京公网安备 11010502036488号