01稀疏数组
Posted shanlu0000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01稀疏数组相关的知识,希望对你有一定的参考价值。
①实际需求
②稀疏数组基本介绍
代码实现
1 package DataStructures01; 2 3 public class SparseArray { 4 5 public static void main(String[] args) { 6 /*1,二维数组转稀疏数组 7 * ①遍历原始的二维数组,得到有效数据的个数sum 8 * ②根据sum就可以创建稀疏数组,saprseArr int[sum+1][3] 9 * ③将二维数组的有效数据存入到稀疏数组 10 */ 11 12 //①遍历原始的二维数组,创建一个原始的二维数组(11*11),0表示没有棋子,1表示黑子,2表示蓝子 13 int chessArr1[][]=new int[11][11];//创建数组 14 chessArr1[1][2]=1;//第二行第三列是一个黑子 15 chessArr1[2][3]=2;//第三行第四列是一个蓝子 16 //遍历并打印出原始的二维数组 17 System.out.println("原始的二维数组: "); 18 for(int i=0;i<chessArr1.length;i++) { 19 for(int j=0;j<chessArr1[i].length;j++) { 20 System.out.print(chessArr1[i][j]+" "); 21 } 22 System.out.println();//每遍历一行就要换行 23 } 24 25 //得到有效数据的个数,需要遍历打印出的这个二维数组 26 int sum=0; 27 for(int i=0;i<chessArr1.length;i++) { 28 for(int j=0;j<chessArr1[i].length;j++) { 29 if(chessArr1[i][j]!=0) { 30 sum++; 31 } 32 } 33 } 34 System.out.println("有效数据的个数是:" +sum); 35 36 //②根据sum创建稀疏数组 37 int sparseArr[][]=new int[sum+1][3]; 38 sparseArr[0][0]=11;//给稀疏数组赋值 39 sparseArr[0][1]=11; 40 sparseArr[0][2]=sum; 41 //遍历并打印出创建的稀疏数组 42 System.out.println("创建的稀疏数组:"); 43 for(int i=0;i<sparseArr.length;i++) { 44 for(int j=0;j<sparseArr[i].length;j++) { 45 System.out.print(sparseArr[i][j]+" "); 46 } 47 System.out.println(); 48 } 49 //遍历原始的二维数组chessArr1,把有效数据存入到稀疏数组中sparseArr 50 int count=0;//用一个计数器,记录当前遍历到第几个非0数据 51 for(int i=0;i<chessArr1.length;i++) { 52 for(int j=0;j<chessArr1[i].length;j++) { 53 if(chessArr1[i][j] !=0) { 54 count++; 55 sparseArr[count][0]=i; 56 sparseArr[count][1]=j; 57 sparseArr[count][2]=chessArr1[i][j]; 58 } 59 } 60 } 61 //遍历并打印出赋过值之后的稀疏数组 62 System.out.println("赋值之后的稀疏数组: "); 63 for(int i=0;i<sparseArr.length;i++) { 64 for(int j=0;j<sparseArr[i].length;j++) { 65 System.out.print(sparseArr[i][j]+" "); 66 } 67 System.out.println(); 68 } 69 70 71 /*2,稀疏数组转原始的二维数组 72 * ①先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组chessArr2[][]=int[11][11] 73 * ②再读取稀疏数组的后几行数据,并赋值给原始的二维数组即可 74 */ 75 76 //①读取稀疏数组第一行数据,并赋值给创建出的原始的二维数组chessArr2[][] 77 int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];//11*11 78 for(int i=1;i<sparseArr.length;i++) { 79 chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 80 } 81 82 //遍历打印出chessArr2,看是否恢复原始数据 83 System.out.println("观察chessArr2是否从稀疏数组中恢复数据:"); 84 for(int i=0;i<chessArr2.length;i++) { 85 for(int j=0;j<chessArr2[i].length;j++) { 86 System.out.print(chessArr2[i][j]+" "); 87 } 88 System.out.println(); 89 } 90 } 91 92 }
控制台打印结果:
原始的二维数组: 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 有效数据的个数是:2 创建的稀疏数组: 11 11 2 0 0 0 0 0 0 赋值之后的稀疏数组: 11 11 2 1 2 1 2 3 2 观察chessArr2是否从稀疏数组中恢复数据: 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
以上是关于01稀疏数组的主要内容,如果未能解决你的问题,请参考以下文章