稀疏數組的生成與還原以及打印驗證

public class Sparse {
    public static void main(String[] args) {
        // 稀疏數組的目的是爲了減少無意義的數組元素
        /*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 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*/

        // 將上述內容轉變成稀疏數組(本質是二維數組,我們可以看做一個矩陣如下)
        /* 11 11 2   (幾行幾列幾個有效數字)
        *  1  2  1   (哪一行哪一列的哪個數字)
        *  2  4  2   (哪一行哪一列的哪個數字)
        * */
        int[][] arr = new int[11][11];
        arr[1][2] = 1;
        arr[2][4] = 2;
        // 生成稀疏數組
        int[][] sparseArr = new int[3][3];
        int count = 0;
        // 拼湊sparseArr[0]
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr[0].length;
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[0].length; j++){
                if(arr[i][j] != 0){
                    count += 1; // 記錄有多少個有效數字(所以稀疏數組有count + 1行,3列)
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = arr[i][j];
                }
            }
        }
        sparseArr[0][2] = count;
        // 打印一下驗證對不對
        for(int p = 0; p < 3; p++){
            System.out.println(sparseArr[p][0] + "\t" + sparseArr[p][1] + "\t" + sparseArr[p][2] + "\t");
        }

        // -----------------還原稀疏數組 (補0)
        int[][] originArr = new int[sparseArr[0][0]][sparseArr[0][1]];
        for(int i = 1; i <= sparseArr[0][2]; i++){
            originArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        // 打印驗證
        for(int[] x: originArr){
            for(int y: x){
                System.out.print(y+"\t");
            }
            System.out.println();
        }
    }
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章