稀疏数组

//稀疏数组
public class ArrayDemo05 {
    public static void main(String[] args) {

        int[][] arr = new int[11][11];
        arr[1][2] = 1;
        arr[2][3] = 2;
        System.out.println("原始数组:");
        for (int[] ints : arr) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
        System.out.println("========================");
        int count = 0;//用来记数

        for (int[] ints : arr) {
            for (int anInt : ints) {
                if (anInt != 0) {
                    count++;//每当数组有一个值不为0,count就+1
                }
            }
        }
        System.out.println("有效数值:" + count);//原始数组里有两个值不为0


        int[][] arr2 = new int[count + 1][3];//声明一个新数组作为稀疏数组  稀疏数组 是三行三列
        //                 第一列(行)    第二列(列)    第三列(值)
        //第一行记录(统计) 一共多少行      多少列       多少个有效值
        //第二行记录(位置)   第几行       第几列         哪个值
        arr2[0][0] = 11;
        arr2[0][1] = 11;
        arr2[0][2] = count;


        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] != 0) {
                    sum++;
                    arr2[sum][0] = i;//i代表第几行
                    arr2[sum][1] = j;//j代表第几列
                    arr2[sum][2] = arr[i][j];//arr[i][j]代表具体的值
                }
            }
        }
        System.out.println("稀疏数组:");
        for (int[] ints : arr2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        System.out.println("==================");
        System.out.println("还原稀疏数组:");

        int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];

        for (int i = 1; i < arr2.length; i++) {
            for (int j = 0; j < arr2[i].length; j++) {
                arr3[arr2[i][0]][arr2[i][1]] = arr2[i][j];
            }
        }
        System.out.println("======================");
        for (int[] ints : arr3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}

 

posted @ 2020-05-26 10:16  七彩云朵^/^  阅读(95)  评论(0编辑  收藏  举报