求二维数组的最大子数组
郑云飞--韩亚华
还接的前几天的求一位数组的子数组,我们看懂了同学各种各样的思路。比如李帅-张硕组的方法就很简答易懂
如下:
int max(int list[],int length) 2 { 3 int sum ; 4 int i,j; 5 int max = list[0]; 6 for(i = 0; i<length; i++) 7 { 8 sum=0; 9 for(j = i;j<length; j++) 10 { 11 sum=sum+list[j]; 12 if(sum>max) 13 { 14 max = sum; 15 } 16 } 17 } 18 return max;
还有网上找的算法:
for(int i = 0;i < 12;i++) { if(sum >= 0)//如果加上某个元素,sum>=0的话,就加 { sum += a[i]; } else //如果加上某个元素,sum<0了,就不加,从当前位置开始 { sum = a[i]; } if(sum > max)max = sum; } return max;
于是我们想能否用以上两种解决这个问题,思路是将二维数组的列或行的子数组的和看成一个新的一维数组的元素。
这样我们就能用到上面的方法实现。这样我们就能简化一部分计算。不过后来我发现有同学和我的像很想,并且他
非常巧妙的实现了(见链接),所以我不再赘述。
http://www.cnblogs.com/sulindong/p/3607523.html
于是我们开始思考别的思路,就如同一维数组的最大子数组是以非负数开头和非负数结尾的,二位子数组的外围行
和列的和肯定也是非负数。如果我们能遍历具有这样特征的字数组,在很多时候就能化简一部分枚举。但这样会使算
法的实现很麻烦,所以我们暂时没采用。所以我们还没有很好的算法。。。。