您的位置:首页 > 其它

查找二维数组list[][]中的最大的子数组的和

2014-03-19 16:05 204 查看
之前做过最大一维数组子数组的和的题目,现在将数组扩展成二维:

代码如下:

#include<iostream>
#define null -858993460
using namespace std;

void main()
{
int arr[]={8,9,10,-1,20,-30,4};
int arr2[]={-9,-1,-4,-123};
int arr3[]={0};
int arr4[]={7,9,8};
int arr5[3];
int a[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}};
int b[2][100];
int c[3][100]={{-1,-2,-3},{-4,-5,-6},{-7,-8,-9}};

int yiwei_maxsub_list(int list[],int length);
int erwei_maxsub_list(int list[][100],int x,int y);

cout<<"一维数组:"<<endl;
cout<<yiwei_maxsub_list(arr,7)<<endl;
cout<<yiwei_maxsub_list(arr2,4)<<endl;
cout<<yiwei_maxsub_list(arr3,1)<<endl;
cout<<yiwei_maxsub_list(arr4,3)<<endl;
cout<<yiwei_maxsub_list(arr5,0)<<endl;

cout<<"二维数组:"<<endl;
cout<<erwei_maxsub_list(a,3,6)<<endl;
cout<<erwei_maxsub_list(b,0,0)<<endl;
cout<<erwei_maxsub_list(c,3,3)<<endl;

}

int yiwei_maxsub_list(int list[],int length)
{
int a[100]={0};
int max;
int i,j;
int k=0;

if(list==NULL||length==0)
{
cout<<"error!inter is null!";
return 0;
}

for(i=0;i<length;i++)
{
a[k]=list[i];
for(j=i;j<length;j++)
{
a[k+1]=a[k]+list[j+1];
k++;
}
}
max=a[0];
for(i=0;i<k;i++)
{
if(max<a[i])
{
max=a[i];
}

}
return max;
}

int erwei_maxsub_list(int list[][100],int x,int y)
{//int list[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}};x=3,y=6
int a[100][100]={0};
int b[100][100]={0};
int max,i,j,n;
int t,k;//t行扩展后的,k列扩展
if(list==NULL||x==0||y==0)//异常处理
{
cout<<"error!inter is null!";
return 0;
}

for(n=0;n<x;n++)//n层(x)
{
k=0;
for(i=0;i<y;i++)
{
a
[k]=list
[i];
for(j=i;j<y;j++)
{
a
[k+1]=a
[k]+list
[j+1];
k++;
}
}
}
t=k;
for(n=0;n<t;n++)//n列(t)
{
k=0;
for(i=0;i<x;i++)
{
b[k]
=a[i]
;
for(j=i;j<x;j++)
{
b[k+1]
=b[k]
+a[j+1]
;
k++;

}
}
}

max=list[0][0];

for(i=0;i<k;i++)
{
for(j=0;j<t;j++)
if(max<b[i][j])
{
max=b[i][j];
}
}
return max;

}


View Code
截图:



时间:用时,在一维数组的前提下1小时;

方法:将二维数组参数传入函数后,函数将数组先进行行扩展,每行记录单独一行的子数组,然后列扩展,将原来的二维数组扩展为子数组和的数组,然后遍历扩展后的数组找到最大值;这样时间复杂度是(m+n)².

总结:这其实体现了敏捷开发中的问题,用户的需求不断改变,团队的效率建立在过去的基础上,迭代开发的效率会比较高。这也是现在软件开发的主流,需要团队合作,代码规范,程序结构完整,健壮性强等等。再今后的软件工程学习和运用中深入体会。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐