稀疏数组

稀疏数组介绍

稀疏数组的处理方法是:

  1. 记录数组一共有几行几列,有多少个不同的值

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

图示

应用实例

二维数组转稀疏数组的思路:

  1. 遍历 原始二维数组,得到有效数据的个数 sum

  2. 根据sum就可以创建 稀疏数组 sparseArr   int[sum + 1][3]

  3. 将二维数组的有效数据存入到 稀疏数组

    稀疏数组转 原始的二维数组 的思路:

  1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始二维数组,比如上面的 chessArr2 = int[11][11]

  2. 再读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可。

代码实现

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

以上

posted @ 2019-12-15 22:08  指尖上的生产者  阅读(163)  评论(0编辑  收藏  举报