设计思想:首先我们应该把求二维数组转换为求一维数组,将每行中的第i列到第j列进行相加,然后得到一个列的矩阵,然后再通过求一维数组的方法来求最大子数组。
问题:对于二维数组求最大子数组刚开始没有任何的思路,不知道该怎么编写,后来在网上找了相关的思路进行编写
package 数组3;
import java.util.Scanner;
public class shuzu3 {
static Scanner in=new Scanner(System.in);
public static void main (String[] args){
int num1[]=new int[10];
int num2[]=new int[20];
System.out.println("请输入数组个数");
int n;
n=in.nextInt();
System.out.println("请输入数组");
for(int i=0;i<n;i++) {
num1[i]=in.nextInt();
num2[i]=num1[i];
}
for(int i=0;i<n;i++) {
num2[i+n]=num1[i];
}
System.out.println("请输入从几个数开始查询");
int m;
m=in.nextInt();
int max=0;
int max2=0;
max2=num2[m-1];
for(int i=m-1;i<n+m-1;i++) {
if(max<=0) {
max=num2[i];
}else {
max+=num2[i];
}
if(max2<max) {
max2=max;
}
}
System.out.println(max2);
}
}
import java.util.Scanner;
public class shuzu3 {
static Scanner in=new Scanner(System.in);
public static void main (String[] args){
int num1[]=new int[10];
int num2[]=new int[20];
System.out.println("请输入数组个数");
int n;
n=in.nextInt();
System.out.println("请输入数组");
for(int i=0;i<n;i++) {
num1[i]=in.nextInt();
num2[i]=num1[i];
}
for(int i=0;i<n;i++) {
num2[i+n]=num1[i];
}
System.out.println("请输入从几个数开始查询");
int m;
m=in.nextInt();
int max=0;
int max2=0;
max2=num2[m-1];
for(int i=m-1;i<n+m-1;i++) {
if(max<=0) {
max=num2[i];
}else {
max+=num2[i];
}
if(max2<max) {
max2=max;
}
}
System.out.println(max2);
}
}
总结:如果想求最大子数组的和,最重要的是遍历数组的方法,但是对于二维数组来说,将每个子数组都遍历出来太困难了,后来通过上网查找以及上课的讨论,找到了一种方法来求最大子数组的和,在这次作业中,发现算法很重要,如果我们在编程之前想到了一个很好的方法,那么最好往往可以达到事半功倍的效果。