二维数组
题目:程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:
数组的行数,
数组的列数,
每一行的元素, (用逗号分开)
每一个数字都是有符号32位整数,当然,行数和列数都是正整数。
每一个数字都是有符号32位整数,当然,行数和列数都是正整数。
思路:我们可以先根据之前的一位数组,先将二维数组看成一个个一位数组,找出一位数组的最大字数组合,
接着判断是否要连通即可。
public static void main(String[] args) throws IOException { Integer c[][]= { {1,2,-3,-1,2,2}, {-3,4,5,1,-1,3}, {-2,-3,4,1,4,3} }; List<List<Integer>> main=new ArrayList<List<Integer>>(); for(int i=0;i<c.length;i++) { List<Integer> heng=new ArrayList<Integer>(); for(int j=0;j<c[0].length;j++) { if(j!=0) heng.add(c[i][j]+heng.get(j-1)); else heng.add(c[i][j]); } if(i!=0) main.add(addList(heng,main.get(i-1))); else main.add(heng); } int max=main.get(0).get(0); for(int z=0;z<main.size();z++) { int temp=Collections.max(main.get(z)); if(max<temp) { max=temp; } } for(int i1=0;i1<main.size();i1++) { for(int j1=0;j1<main.get(0).size();j1++) { for(int i2=i1+1;i2<main.size();i2++) { for(int j2=j1+1;j2<main.get(0).size();j2++) { int g_max=0; if(i1!=0&&j1!=0) { g_max=(main.get(i2).get(j2)+main.get(i1-1).get(j1-1)-main.get(i2).get(j1-1)-main.get(i1-1).get(j2)); } else if(i1!=0) { g_max=(main.get(i2).get(j2)-main.get(i1-1).get(j2)); } else if(j1!=0) { g_max=(main.get(i2).get(j2)-main.get(i2).get(j1-1)); } if(max<g_max) { max=g_max; } } } } } System.out.println("该二维数组整理区域和为:"+main); System.out.println("该二维数组最大块区域和为:"+max); } public static List<Integer> addList(List<Integer> a,List<Integer> b) { List<Integer> sum=new ArrayList<Integer>(); for(int i=0;i<a.size();i++) { sum.add(a.get(i)+b.get(i)); } return sum; }

浙公网安备 33010602011771号