之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组。
求二维数组的最大子数组思想是建立在以为数组。首先将数组的第一列看成一个一维数组,找到该列的最大子数组的值,然后将第二列与第一列看成是一个新一列,这样就又出现了一个新的一维数组,重复以上的步骤,就可以全部搜索二维数组,找到其中最大子数组的值。
#include "stdafx.h"int main(){ int m,n,i,j,k,z; static int q=0,b; printf("请输入数组的行数和列数\n"); scanf("%d%d",&q,&b); int sum1,sum[100]; int a[100][100]; int max=0; printf("请输入数据\n"); for(i=0;imax) { max=sum1; } } } } } printf("最大值为%d\n",max); return 0;}
一下是我们组讨论的图
实验结果
实验猜想
基于以上的讨论我们组找到了二维数组中最大子数组的值,但是这方法比较笨,时间复杂度是O(n*3).所以我们猜想应该找到一个算法,以数组中最大值为一点,进行扩散的寻找最大子数组的值,这样程序执行起来时间复杂度会降低,因此我们组将继续讨论,以降低时间复杂度.