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