查找二维数组list[][]中的最大的子数组的和
2014-03-19 16:05
204 查看
之前做过最大一维数组子数组的和的题目,现在将数组扩展成二维:
代码如下:
View Code
截图:
时间:用时,在一维数组的前提下1小时;
方法:将二维数组参数传入函数后,函数将数组先进行行扩展,每行记录单独一行的子数组,然后列扩展,将原来的二维数组扩展为子数组和的数组,然后遍历扩展后的数组找到最大值;这样时间复杂度是(m+n)².
总结:这其实体现了敏捷开发中的问题,用户的需求不断改变,团队的效率建立在过去的基础上,迭代开发的效率会比较高。这也是现在软件开发的主流,需要团队合作,代码规范,程序结构完整,健壮性强等等。再今后的软件工程学习和运用中深入体会。
代码如下:
#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)².
总结:这其实体现了敏捷开发中的问题,用户的需求不断改变,团队的效率建立在过去的基础上,迭代开发的效率会比较高。这也是现在软件开发的主流,需要团队合作,代码规范,程序结构完整,健壮性强等等。再今后的软件工程学习和运用中深入体会。
相关文章推荐
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
- 二维数组, 二分法查找数组元素下标 快速查找数组最大值 数组作为实参的问题
- 查找二维数组中子数组之和最大值 郭莉莉&&李亚文
- 剑指offer2--二维数组中的查找(数组使用)
- 首尾连接的二维数组中连续子数组的最大和
- 数组的遍历,获取最大值,数组的反转,数组中元素的查找、冒泡排序、选择排序、折半查找法
- 有一个二维数组杨氏矩阵,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在
- 首尾相连的二维数组最大子数组求和
- C#之使用委托查找任意单一类型数组的最大值
- Java查找 List 中的最大最小值实例演示
- 查找对象数组中某属性的最大最小值
- 二维数组最大子数组和
- 编写一个通用程序,将二维数组含有最大元素的列与第0列元素对调。例如,原数组和调换后的目标数组为
- turbo C编译器报错数组太大怎么办 在VC6.0中,用C语言最大可以建多大的二维数组?? --转
- 二维数组最大联通子数组
- 《剑指Offer》面试题3:二维数组中的查找(行列分别有序数组的二分查找)
- java中数组的最大长度以及List的最大容量
- List < String[] > 转成数组后是二维数组
- 请使用迭代查找一个list中最小和最大值,并返回一个tuple
- 根据实体中一个属性值查找实体数组中的所有实体并放到list中