zoukankan      html  css  js  c++  java
  • 1、稀疏数组

    来源:https://www.bilibili.com/video/BV1B4411H76f?p=9

    一、稀疏数组的基本介绍

      一个二维数组中,如果大部分元素为0,或者是同一个值,可以用一种更简单的方式存储该数组。

      1)记录二维数组有几行几列,一共有多少个值;

      2)记录这些值所在的位置及值的大小。

      这样形成的数组就是稀疏数组。

    二、稀疏数组实例

      1、原始的二维数组

     1 0    0    0    0    0    0    0    0    0    0    0    
     2 0    0    1    0    0    0    0    0    0    0    0    
     3 0    0    0    2    0    0    0    0    0    0    0    
     4 0    0    0    0    0    0    0    0    0    0    0    
     5 0    0    0    0    0    0    0    0    0    0    0    
     6 0    0    0    0    0    0    0    0    0    0    0    
     7 0    0    0    0    0    0    0    0    0    0    0    
     8 0    0    0    0    0    0    0    0    0    0    0    
     9 0    0    0    0    0    0    0    0    0    0    0    
    10 0    0    0    0    0    0    0    0    0    0    0    
    11 0    0    0    0    0    0    0    0    0    0    0

      2、对应的稀疏数组

    1 11   11   2    
    2 1    2    1    
    3 2    3    2

      稀疏数组中:

        第一行[11,11,2]表示原二维数组有11行11列2个值;

        第二行[1,2,1]表示下标为(1,2)的位置有一个值,值为1;

        同理,第三行[2,3,2]表示下标为(2,3)的位置有一个值,值为2。

    三、应用实例

      1、问题描述

      1)把上述二维数组存为稀疏数组

      2)将存储后的稀疏数组恢复为原始数组

      2、思路

      1)二维数组→稀疏数组

        • 遍历原始数组得到有效数据的个数sum;

        • 根据sum创建稀疏数组spareArr [sum+1][3];

        • 将有效数据存储到稀疏数组。

      2)稀疏数组→二维数组

        • 读取稀疏数组第一行,创建原始二维数组;

        • 读取稀疏数组后面的行,赋值给二维数组对应的位置。

      3、代码实现

      1)创建二维数组

     1 // 创建原始二维数组 11*11
     2 int chessArr1[][] = new int[11][11];
     3 chessArr1[1][2] = 1;
     4 chessArr1[2][3] = 2;
     5 //输出原始数组
     6 for(int[] row : chessArr1) {
     7     for(int data : row) {
     8         System.out.printf("%d	",data);
     9     }
    10     System.out.println();
    11 }

      2)二维数组→稀疏数组

     1 //*************************将二维 转 稀疏
     2 //遍历得到非零数据个数
     3 int sum = 0;
     4 for(int i = 0;i < 11; i++) {
     5     for(int j = 0;j < 11; j++) {
     6     if(chessArr1[i][j] != 0) {
     7         sum++;
     8     }
     9     }            
    10 }
    11         
    12 //创建稀疏
    13 int sparseArr[][] = new int[sum+1][3];
    14 sparseArr[0][0] = 11;
    15 sparseArr[0][1] = 11;
    16 sparseArr[0][2] = sum;
    17         
    18 //稀疏赋值
    19 int count = 0;//记录是第几个非零数据
    20 for(int i = 0;i < 11; i++) {
    21     for(int j = 0;j < 11; j++) {
    22         if(chessArr1[i][j] != 0) {
    23             count++;
    24             sparseArr[count][0] = i;
    25             sparseArr[count][1] = j;
    26             sparseArr[count][2] = chessArr1[i][j];
    27         }
    28     }            
    29 }
    30         
    31 //输出
    32 System.out.println();
    33 System.out.println("得到的稀疏数组为:");
    34 for(int i = 0; i < sparseArr.length; i++) {
    35     System.out.printf("%d	%d	%d	
    ",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
    36 }
    37 System.out.println();

      3)稀疏数组→二维数组

    //***********************稀疏恢复
    int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
    for(int i = 1;i < sparseArr.length; i++) {
        chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
                            
    }
            
    //输出
    System.out.println();
    System.out.println("恢复的二维数组为:");
    for(int[] row : chessArr2) {
        for(int data : row) {
            System.out.printf("%d	",data);
        }
        System.out.println();
    }

        

  • 相关阅读:
    flask 返回json数据
    flask 中文乱码
    flask 参数校验
    AOP集成防止连续多次点击问题
    关于横竖屏切换导致的Activity重建问题
    Flutter工程无法找到Android真机或Android模拟器
    Failed to find configured root that contains
    Unable to resolve dependency问题解决
    双重ScrollView,RecyclerView联动实例
    RecyclerView联动滑动失败
  • 原文地址:https://www.cnblogs.com/zhao-xin/p/12889556.html
Copyright © 2011-2022 走看看