稀疏数组
稀疏数组介绍
稀疏数组的处理方法是:
-
记录数组一共有几行几列,有多少个不同的值
-
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
图示
应用实例
二维数组转稀疏数组的思路:
-
遍历 原始二维数组,得到有效数据的个数 sum
-
根据sum就可以创建 稀疏数组 sparseArr int[sum + 1][3]
-
将二维数组的有效数据存入到 稀疏数组
稀疏数组转 原始的二维数组 的思路:
-
先读取稀疏数组的第一行,根据第一行的数据,创建原始二维数组,比如上面的 chessArr2 = int[11][11]
-
再读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可。
代码实现
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 }
以上
朱子家训说:宜未雨而筹谋,勿临渴而掘井。
任何事情要到了跟前才想解决办法,那我们岂不很被动!