稀疏数组

    科技2022-07-14  133

    稀疏数组

    当一个数组中大部分元素都为同一个值,可以使用稀疏数组来保存该数组。(以时间换空间的做法)

    稀疏数组

    记录该数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小数组所占的内存空间

    使用稀疏数组之后从一个6*7=42的数组变为9*3=27的数组

    建立稀疏数组的步骤

    遍历原始数组,得到有效数据的个数sum根据sum创建稀疏数组sparseArr int[sum+1][3]将二维数组的有效数据存储入稀疏数组

    稀疏数组转换成原始二维数组的步骤

    先读取稀疏数组的第一行,根据第一行存储的原始数组的行数和列数、有效数据个数,创建原始的数组。再读取稀疏数组后几行的有效数据并赋给原始数组

    代码

    /** * @author:zmc * @function: * @date: 2020/10/2 16:25 */ public class SparseArray { public static void main(String[] args) { //创建 11*11二维数组 //0:无棋子 1:黑子 2:蓝子 int chessArr[][] = new int[11][11]; chessArr[1][2] = 1; chessArr[2][4] = 1; int sum = 0; for(int[] row : chessArr){ for(int column : row){ System.out.printf("%d\t",column); if(column != 0){ sum++; } } System.out.println(); } //创建稀疏数组 行数为非特殊值个数+1 列数为3 int[][] sparseArray = new int[sum+1][3]; //稀疏数组第一行记录原始数组的行数 列数 以及非特殊值的个数 sparseArray[0][0] = 11; sparseArray[0][1] = 11; sparseArray[0][2] = sum; sum = 0; for(int i = 0; i < chessArr.length; i++){ for(int j = 0; j < chessArr[0].length; j++){ if(chessArr[i][j] != 0){ sparseArray[++sum][0] = i; sparseArray[sum][1] = j; sparseArray[sum][2] = chessArr[i][j]; } } } System.out.println("稀疏数组为:"); for(int[] row : sparseArray){ for(int column : row){ System.out.printf("%d\t",column); } System.out.println(); } //将稀疏数组转化为普通数组 int[][] chessArr2 = new int[sparseArray[0][0]][sparseArray[0][1]]; for(int i = 1; i <= sparseArray[0][2]; i++){ chessArr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[0][2]; } for(int[] row : chessArr2){ for(int column : row){ System.out.printf("%d\t",column); if(column != 0){ sum++; } } System.out.println(); } } }

    Processed: 0.016, SQL: 8