【狂神说Java】稀疏数组

稀疏数组

  • 稀疏数组是一种数据结构
  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的行列及值记录在一个小规模的数组中,从而缩小程序的规模

稀疏数组

//1、创建一个二维数组
//2、转化成稀疏数组
//3、稀疏数组还原成原来的值

public class Main {
    public static void main(String[] args) {
        // 稀疏数组
        // 创建一个二维数组
        int[][] numsArrays = new int[11][11]; // 11*11
        numsArrays[1][2] = 1;
        numsArrays[2][3] = 2;
        numsArrays[3][4] = 2;

        printArrays(numsArrays);

        System.out.println("==============================");
        System.out.println("转换成稀疏数组");
        System.out.println("==============================");

        // 转化成稀疏数组
        // 稀疏数组由三列组成,有几个数据就有几行
        int len = 0; // 计算有几个数据
        for (int[] nums : numsArrays) {
            for (int num : nums) {
                if (num != 0) {
                    len++;// 非零+1
                }
            }
        }

        int count = 0;
        // 生成一个二维数组
        int[][] sparseArrays = new int[len+1][3];
        // 稀疏数组表头
        sparseArrays[count][0] = 11;
        sparseArrays[count][1] = 11;
        sparseArrays[count][2] = len;
        // 遍历数组,将值存入稀疏数组
        for (int i = 0; i < numsArrays.length; i++) {
            for (int j = 0; j < numsArrays[i].length; j++) {
                if (numsArrays[i][j] != 0) {
                    count++;
                    sparseArrays[count][0] = i;
                    sparseArrays[count][1] = j;
                    sparseArrays[count][2] = numsArrays[i][j];

                }
            }
        }

        printArrays(sparseArrays);

        // 还原值
        System.out.println("==============================");
        System.out.println("还原值");
        System.out.println("==============================");

        int[][] arrayOrigin = new int[sparseArrays[0][0]][sparseArrays[0][1]];
        for (int i = 1; i < sparseArrays.length; i++) {
            // 从第一行开始
            arrayOrigin[sparseArrays[i][0]][sparseArrays[i][1]] = sparseArrays[i][2];
        }

        printArrays(arrayOrigin);
    }

    public static void printArrays(int[][] Arrays){
        /**
         * 打印数组方法
         */
        for (int[] nums : Arrays) {
            for (int j = 0; j < nums.length; j++) {
                System.out.print(nums[j] + "\t");
            }
            System.out.println();
        }
    }
}
posted @ 2021-09-07 10:42  Jie7  阅读(114)  评论(0)    收藏  举报