1.1 稀疏数组

  • 基本介绍

    • 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
  • 处理方法

    • 第一行:记录数组 一共有几行几列,有多少个不同的值
    • 第二行以后:把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 代码实现

  • public static void main(String[] args) {
       // 构建原始数组(并赋值初始值,假设大量的默认值为0)
       int[][] originalArray = new int[11][11];
       originalArray[1][2] = 1;
       originalArray[2][3] = 2;
       originalArray[3][4] = 2;
       System.out.println("原始数组");
       for (int[] ints : originalArray) {
          for (int anInt : ints) {
              System.out.printf("%d\t", anInt); // 格式化输出
          }
          System.out.println();
       }
       // 构建稀疏数组
       int sum = 0; // 其他值的个数(重复值应不应该算)
       for (int[] ints : originalArray) {
          for (int anInt : ints) {
              if (anInt != 0) {
                  sum++;
              }
          }
       }
       int[][] sparseArray = new int[sum + 1][3];
       // 第一行 原始数组行数,原始数组列数,其他值的个数
       sparseArray[0][0] = 11;
       sparseArray[0][1] = 11;
       sparseArray[0][2] = sum;
       // 每个其他值对应原始数组的行号,列号,值
       int row = 1;
       for (int i = 0; i < originalArray.length; i++) {
          for (int j = 0; j < originalArray[i].length; j++) {
              if (originalArray[i][j] != 0) {
                  sparseArray[row][0] = i;
                  sparseArray[row][1] = j;
                  sparseArray[row][2] = originalArray[i][j];
                  row++;
              }
          }
       }
       System.out.println("稀疏数组");
       for (int[] ints : sparseArray) {
          System.out.printf("%d\t%d\t%d\t\n", ints[0], ints[1], ints[2]); // 格式化输出
       }
       // 将稀疏数组转换成原始数组
       int[][] originalArray1 = new int[sparseArray[0][1]][sparseArray[0][1]];
       for (int i = 1; i < sparseArray.length; i++) {
          originalArray1[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
       }
       System.out.println("恢复的原始数组");
       for (int[] ints : originalArray1) {
          for (int anInt : ints) {
              System.out.printf("%d\t", anInt); // 格式化输出
          }
          System.out.println();
       }
    }
    
    输出结果:
    原始数组
    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	2	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	
    稀疏数组
    11	11	3	
    1	2	1	
    2	3	2	
    3	4	2	
    恢复的原始数组
    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	2	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
    
posted @ 2020-08-27 17:43  xiaokantianse  阅读(40)  评论(0编辑  收藏  举报