问题:一个由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;
}
本文介绍了一种使用动态规划解决一维数组最大子数组和问题的算法,该算法的时间复杂度为O(N),通过K个阶段的状态转移实现,适用于需要快速找到连续子数组最大和的应用场景。

被折叠的 条评论
为什么被折叠?



