稀疏数组

稀疏数组的应用场景:当二维数组中有大量重复数字(以0为例)时,可以用稀疏数组进行保存,节省保存空间。

稀疏数组有三列n行

第一行用来记录原二维数组信息,第一列用来记录原二维数组的行数,第二列用来记录二维数组的列数,第三列用来记录二维数组中非0个数。

其他行用来记录非0元素的信息,第一列记录其在原二维数组中的行标,第二列记录列标,第三列用来记录其具体的值。

可见稀疏数组的行数 n=二维数组非0元素的个数+1;

代码练习:

public class SparseArray {
    public static void main(String[] args) {

        //稀疏数组棋牌案例(0表示空格,1表示黑子,2表示白子)

        //创建一个原始棋牌
        int chesArr[][]= new int[11][11];
        chesArr[2][3] = 2;
        chesArr[5][6] = 1;

        int sum=0;//用来记录非0的个数
        for(int i=0;i<chesArr.length;i++){
            for(int j=0;j<chesArr[i].length;j++){
                if(chesArr[i][j] !=0)
                    sum++;
            }
        }

        int[][] sparseArray = new int[sum+1][3];
        //第一行用来记录原二维数组的行和列,剩余的行用来记录非0数据的位置和值
        sparseArray[0][0] = 11;
        sparseArray[0][1] = 11;
        sparseArray[0][2] = sum;

        int count=1;
        for(int i=0;i<chesArr.length;i++){
            for(int j=0;j<chesArr[i].length;j++){
                if(chesArr[i][j] !=0){
                    sparseArray[count][0]=i;//第一行用来记录元二维数组的非0数据的行
                    sparseArray[count][1]=j;//第二行用来记录元二维数组的非0数据的列
                    sparseArray[count][2] = chesArr[i][j];//第三行用来记录元二维数组的非0数据的值
                    count++;
                }
            }
        }

        //还原数组
        int[][] chesArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
        for(int i=1;i<sparseArray.length;i++){
            int row=sparseArray[i][0];
            int line=sparseArray[i][1];
            chesArr2[row][line]=sparseArray[i][2];
        }

        //遍历
        for(int[] row : chesArr2){
            for(int data : row){
                System.out.print(" "+data);
            }
            System.out.println();
        }
    }

}
原文地址:https://www.cnblogs.com/susexuexi011/p/14049813.html