稀疏数组

public class SparseArray {

    public static void display(int arr[][]) {
        for (int[] i : arr) {
            for (int j : i) {
                System.out.printf("%s\t", j);
            }
            System.out.println();
        }
    }

    /**
     * 二维数组转成稀疏数组
     *
     * @param arrs
     */
    public static void toSparse(int arrs[][]) {

        int nums = 0; //有效数据
        int col = arrs[0].length; //行数
        int row = arrs.length;//列数
        for (int[] arr : arrs) {
            for (int i : arr) {
                if (i != 0) {
                    nums++;
                }
            }
        }
        int[][] sparse = new int[nums + 1][3];
        sparse[0][0] = row;
        sparse[0][1] = col;
        sparse[0][2] = nums;
        int index = 1;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (arrs[i][j] != 0) {
                    sparse[index][0] = i;
                    sparse[index][1] = j;
                    sparse[index][2] = arrs[i][j];
                    index++;
                }
            }
        }
        System.out.println("二维转稀疏数组:");
        display(sparse);
        System.out.println();
        sparse(sparse);
    }

    /**
     * 稀疏数组转二维数组
     */
    public static  void sparse(int sparseArr[][]) {
        int row = sparseArr[0][0],
                col = sparseArr[0][1],
                nums = sparseArr[0][2];

        int[][] arr = new int[row][col];
        for (int i = 1; i <= nums; i++) {
            int[] ints = sparseArr[i];
            arr[ints[0]][ints[1]] = ints[2];
        }
        System.out.println("稀疏数组还原:");
        display(arr);
        System.out.println();
    }

    public static void main(String[] args) {
        int arr[][] = new int[5][10];
        arr[1][3] = 4;
        arr[1][2] = 2;
        arr[2][3] = 3;
        arr[4][2] = 5;
        toSparse(arr);
        System.out.println("原始数组:");
        display(arr);
    }
}

output:

二维转稀疏数组:
5	10	4	
1	2	2	
1	3	4	
2	3	3	
4	2	5	

稀疏数组还原:
0	0	0	0	0	0	0	0	0	0	
0	0	2	4	0	0	0	0	0	0	
0	0	0	3	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	5	0	0	0	0	0	0	0	

原始数组:
0	0	0	0	0	0	0	0	0	0	
0	0	2	4	0	0	0	0	0	0	
0	0	0	3	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	5	0	0	0	0	0	0	0	

Process finished with exit code 0

posted @ 2022-06-06 11:21  webzom  阅读(25)  评论(0)    收藏  举报