题目:返回一个整数数组中最大子数组的和。
要求: 要求程序必须能处理1000 个元素; 每个元素是int32 类型的; 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。
#include <iostream>
using namespace std;
#define N 1000
void main(){
int b[N+1];
int max[N] ,max1,n;
int j,k,a,i,g;
max[2000] = 0;max1 = 0;
cout<<"随机生成1000个数:"<<endl;
for(j = 0;j<N;j++) {
a = rand()%2;
if(a == 0) b[j] = 0-rand()%1000;
if(a == 1) b[j] = rand()%1000;
cout<<b[j]<<" ";
}
for(j = 0;j < N;j++){
a = 0;
for(k = j;k < N;k++){
a+= b[k] ;
if(a>max[j]){
max[j] = a;
n = k;
}
}
if(max[j]>max1){
max1 = max[j];
i = j;
}
}
cout<<endl;
cout<<"连续数组为: "<<endl;
for(g = i;g < n+1;g++)
cout<<b[g]<<" ";
cout<<endl;
cout<<"连续数组最大的和为"<<max1<<endl;
}
经过改善始终不能把o(n2)改成0(n)不过我后续会在进行改善