您的位置:首页 > 编程语言

编程之美 2.14 求数组的子数组之和的最大值

2013-04-18 22:22 267 查看
问题:一个由N个整数元素的一维数组,求其所有子数组中连续的元素和的最大值。

 

算法时间复杂度O(N)

使用动态规划的方法,有K个阶段,每个阶段有两种状态。

#include<iostream>
using namespace std;
#define max(a,b)  (((a)>=(b))?(a):(b))
int main()
{
int *A;
int i=0;
int n,start,all;
char ch;
cout<<"请输入整数,按回车键结束输入:"<<endl;
A=(int *)malloc(sizeof(int));
cin>>A[0];
while ((ch=getchar())!='\n')
{
i++;
A=(int*)realloc(A,sizeof(int)*(i+2));
cin>>A[i];
}
i++;
A[i]='\0';
n=i;
start=A[n-1];
all=A[n-1];
for (i=n-2;i>=0;i--)//k个阶段
{
start=max(A[i],start+A[i]);//两个状态
all=max(start,all);
}
cout<<all<<endl;
return 0;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: