求二维数组的矩形数组的最小数组和。
最笨的设计思想:将这个矩形是两个对角顶点组成的。将两个点设为a,b。a表示上面那个顶点,b表示下面那个顶点。将a固定,移动b点直至出二维数组,然后移动a点,再将b点指向a点。这样轮回直到a移出二维数组。
package test3;
public class The_thrid_test {
public static void main(String[] args) {
int a[][]= {{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4}};//表示一个二维数组
int max = a[0][0]; //初始化最大值
int sum=0; //定义每个子二维数组的和
int as=0,bs=0,n=0,m=0; //定义让矩形的两个对顶点的角标
while(n<a.length) { //如果矩形的第一个顶点出了二维数组时跳出循环
for(int i=n;i<=as;i++) { //计算以不同数字为矩形第一个顶点的多有子二维数组的和
for(int j=m;j<=bs;j++) {
sum+=a[i][j];
}
}
//让下面的顶点移动
bs++;
if(bs==a[as].length) {
as++;
bs=m;
}
//让上面的顶点移动并将移到外面的顶点指向上面的顶点上。
if(as==a.length) {
m++;
if(m==a[n].length)
{
n++;
m=0;
}
as=n;
bs=m;
}
//比较最大值
if(sum>max)
max=sum;
sum=0;
}
System.out.println(max);
}
}
public static void main(String[] args) {
int a[][]= {{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4}};//表示一个二维数组
int max = a[0][0]; //初始化最大值
int sum=0; //定义每个子二维数组的和
int as=0,bs=0,n=0,m=0; //定义让矩形的两个对顶点的角标
while(n<a.length) { //如果矩形的第一个顶点出了二维数组时跳出循环
for(int i=n;i<=as;i++) { //计算以不同数字为矩形第一个顶点的多有子二维数组的和
for(int j=m;j<=bs;j++) {
sum+=a[i][j];
}
}
//让下面的顶点移动
bs++;
if(bs==a[as].length) {
as++;
bs=m;
}
//让上面的顶点移动并将移到外面的顶点指向上面的顶点上。
if(as==a.length) {
m++;
if(m==a[n].length)
{
n++;
m=0;
}
as=n;
bs=m;
}
//比较最大值
if(sum>max)
max=sum;
sum=0;
}
System.out.println(max);
}
}