稀疏数组和二维数组的转换

 当一个少数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组

稀疏数组的处理方法:

  1. 记录数组一共有几行几列,有多少个不同的值
  2. 把具有不同元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

用例:

 java代码如下:

 1 public class SparseArray {
 2 
 3     public static void main(String[] args) {
 4         //创建原始二位数组11*11
 5         //0:表示没有棋子 1 黑子 2蓝子
 6         int chessArr1[][] = new int[11][11];
 7         chessArr1[1][2] =1;
 8         chessArr1[2][3] =2;
 9         System.out.println("原始的二维数组:");
10         for (int[] row : chessArr1) {
11             for (int data : row) {
12                 System.out.printf("%d	",data);
13             }
14             System.out.println();
15         }
16         // 1.先遍历二维数组得到非0数据的个数
17         int sum = 0;
18         for (int i = 0; i < 11; i++) {
19             for (int j = 0; j < 11; j++) {
20                 if(chessArr1[i][j]!=0){
21                     sum++;
22                 }
23             }
24         }
25         System.out.println("sum=="+sum);
26         //2.创建对应的稀疏数组
27         int sparseArr[][] = new int[sum+1][3];
28         //给稀疏数组赋值
29         sparseArr[0][0] = 11;
30         sparseArr[0][1] = 11;
31         sparseArr[0][2] = sum;
32         
33         //先遍历二维数组 把非0数据存放在sparseArr中
34         int count = 1;//用于记录第几个非0数字
35         for (int i = 0; i < 11; i++) {
36             for (int j = 0; j < 11; j++) {
37                 if(chessArr1[i][j]!=0){
38                     sparseArr[count][0] = i;
39                     sparseArr[count][1] = j;
40                     sparseArr[count][2] = chessArr1[i][j];
41                     count++;
42                 }
43             }
44         }
45         
46         //输出稀疏数组
47         System.out.println("得到的稀疏数组:");
48         for (int i = 0; i < sparseArr.length; i++) {
49             System.out.printf("%d	%d	%d	
",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
50         }
51         
52         //3.将稀疏数组转换成二维数组
53         //读取稀疏数组第一行给二维数组赋值
54         int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
55         //读取稀疏数组后几行给二维数组赋值
56         for (int i = 1; i < sparseArr.length; i++) {
57             chessArr2[sparseArr[i][0]][sparseArr[i][1]]= sparseArr[i][2];
58         }
59         System.out.println();
60         System.out.println("恢复后的二维数组");
61         for (int[] row : chessArr2) {
62             for (int data : row) {
63                 System.out.printf("%d	",data);
64             }
65             System.out.println();
66         }
67         
68     }
69 }
test

显示结果:

原始的二维数组:
0    0    0    0    0    0    0    0    0    0    0    
0    0    1    0    0    0    0    0    0    0    0    
0    0    0    2    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
sum==2
得到的稀疏数组:
11    11    2    
1    2    1    
2    3    2    

恢复后的二维数组
0    0    0    0    0    0    0    0    0    0    0    
0    0    1    0    0    0    0    0    0    0    0    
0    0    0    2    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0   0
原文地址:https://www.cnblogs.com/cai170221/p/13388203.html