Introduction
当一个数组中大部分元素为0,或者为同一个值时,可以用稀疏数组来保存该数组
Sparse array processing method
1. 记录数组中一共有几行几列,有多少个不同的值
2. 把具有不同值的元素的行、列及值记录在一个小规模的数组中,从而缩小程序的规模。
Two-dimensional array:
converted sparse array:
Description: How many rows, columns, and valid values are stored in the first row of the array. All subsequent rows record the row number and column number of the valid value respectively.
Code
-
Convert a two-dimensional array to a sparse array
1. Traverse the original two-dimensional array to get the number of valid data sum
2. According to the sum, you can create a sparse array sparseArr int[sum + 1][3]
3. Convert the two-dimensional array Valid data is stored in sparse array//创建一个原始的二维数组 11*11 //0:没有棋子 1:黑子 2:蓝子 int[][] chessArr1 = new int[11][11]; for(int i = 0; i<chessArr1.length; i++){ for(int j = 0; j<chessArr1[i].length; j++) chessArr1[i][j] = 0; } chessArr1[1][2] = 1; chessArr1[2][3] = 2; //将二维数组转稀疏数组 //1、先遍历二维数组,得到非0数据的个数 int sum = 0; for(int i = 0; i < chessArr1.length; i++){ for(int j = 0; j < chessArr1[i].length; j++){ if(chessArr1[i][j] != 0) sum++; } } //2、创建稀疏数组 int sparseArr[][] = new int[sum + 1][3]; //给稀疏数组赋值 sparseArr[0][0] = chessArr1.length; sparseArr[0][1] = chessArr1[0].length; sparseArr[0][2] = sum; //遍历二维数组,将非0值填入稀疏数组 int rows = 1; //记录往稀疏数组的第几行填值 for(int i = 0; i < chessArr1.length; i++){ for(int j = 0; j < chessArr1[i].length; j++){ if(chessArr1[i][j] != 0){ sparseArr[rows][0] = i; sparseArr[rows][1] = j; sparseArr[rows++][2] = chessArr1[i][j]; } } }
-
Sparse array is restored to two-dimensional array
//将稀疏数组恢复成二维数组 int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]]; for(int i = 0; i<sparseArr[0][2]; i++){ chessArr2[sparseArr[i+1][0]][sparseArr[i+1][1]] = sparseArr[i+1][2]; }