结对开发——求二维环形数组所有子矩阵最大和的问题
一、题目要求: 输入一个二维整形数组,数组里有正数也有负数。 二维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和。 二、解决思路: 由于上次我们做过求二维数组最大子矩阵和的问题,又做了求一维环状数组的子数组最大值问题,这次就在以前的基础上进行修改,先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果。 三、程序代码: #include "stdafx.h" #include<iostream.h> int main(int argc, char* argv[]) { int i,j; int a[3][5]={{1,-2,3},{1,-3,2},{4,-4,5}}; int b[3][5]; for(i=0;i<3;i++) { for(j=0;j<2;j++) a[i][j+3]=a[i][j]; } int max=a[0][0]; cout<<"初始二维数组为:"<<endl; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout<<a[i][j]<<' '; } cout<<endl; } cout<<"重构后环形数组为:"