zoukankan      html  css  js  c++  java
  • 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	", 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	%d	%d	
      ", 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	", 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
      
  • 相关阅读:
    小米路由通过SSH添加静态路由表之后无法跳转的问题
    极路由通过SSH添加静态路由表之后无法跳转的问题
    Linux服务器压测/拷机软件收集
    RabbitMQ整合Spring Booot【消费者补偿幂等问题】
    找不到共享解决办法
    如何一步步设计一款微服务的补偿方案
    Spring Cloud 支付宝支付的流程
    把同事的重复代码清理干净,老板却让我做了回滚?
    [LeetCode] 565. Array Nesting 数组嵌套
    [LeetCode] Out of Boundary Paths 出界的路径
  • 原文地址:https://www.cnblogs.com/xiaokantianse/p/13572767.html
Copyright © 2011-2022 走看看