二维数组

思路:

由已知一维数组的算法,用一个新的二维数组对该二维区域的数组进行求和,例如新的二维数组的第5个位置,就代表从1到5斜对角线的块状区域的和,即1,2,4,5这4个数的和,x个位置表示从1到x的斜对角块状区域的和,利用循环一一求出对应的和,一次循环即可,这个循环复杂度为O(nm)

 1 package shuzu;
 2 import java.io.IOException;
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.List;
 6 public classs shuzu2 {
 7         public static void main(String[] args) throws IOException {
 8             Integer c[][]= {
 9                 {1,2,-3,-1,2,2},
10                 {-3,4,5,1,-1,3},
11                 {-2,-3,4,1,4,3}
12             };
13             //求和
14             List<List<Integer>> main=new ArrayList<List<Integer>>();
15             for(int i=0;i<c.length;i++)
16             {
17                 List<Integer> heng=new ArrayList<Integer>();
18                 for(int j=0;j<c[0].length;j++)
19                 {
20                     if(j!=0)
21                         heng.add(c[i][j]+heng.get(j-1));
22                     else heng.add(c[i][j]);
23                 }
24                 if(i!=0)
25                     main.add(addList(heng,main.get(i-1)));
26                 else main.add(heng);
27             }
28             //求最大值
29             
30             int max=main.get(0).get(0);
31             for(int z=0;z<main.size();z++)
32             {
33                 int temp=Collections.max(main.get(z));
34                 if(max<temp)
35                 {
36                     max=temp;
37                 }
38             }
39             //确定一位置
40             for(int i1=0;i1<main.size();i1++)
41             {
42                 for(int j1=0;j1<main.get(0).size();j1++)
43                 {
44                     //确定二位置
45                     for(int i2=i1+1;i2<main.size();i2++)
46                     {
47                         for(int j2=j1+1;j2<main.get(0).size();j2++)
48                         {
49                             int g_max=0;
50                             if(i1!=0&&j1!=0)
51                             {
52                                 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));
53                                 
54                             }
55                             else if(i1!=0)
56                             {
57                                 g_max=(main.get(i2).get(j2)-main.get(i1-1).get(j2));
58                             }
59                             else if(j1!=0)
60                             {
61                                 g_max=(main.get(i2).get(j2)-main.get(i2).get(j1-1));
62                             }
63                             if(max<g_max)
64                             {
65                                 max=g_max;
66                             }
67                         }
68                     }
69                 }
70             }
71             System.out.println("该二维数组整理区域和为:"+main);
72             System.out.println("该二维数组最大块区域和为:"+max);
73         }
74         public static List<Integer> addList(List<Integer> a,List<Integer> b)
75         {
76             List<Integer> sum=new ArrayList<Integer>();
77             for(int i=0;i<a.size();i++)
78             {
79                 sum.add(a.get(i)+b.get(i));
80             }
81             return sum;
82         }
83 }

 

posted @ 2019-03-18 17:13  _小白兔  阅读(167)  评论(0编辑  收藏  举报