稀疏数组

稀疏数组:


什么是稀疏数组?

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

  • 其处理方式是:

    • 记录数组一共有几行几列,有多少不同的值

    • 把具有不同值的元素和行、列、值记录在一个小规模的数组中,从而缩小程序的规模。

 

 

 


如图:

 

 

 

将该数组转化为稀疏数组并输出,在将稀疏数组转化为原数组输出。


package com.cheng.array;

import java.util.Arrays;

public class ArrayDemo07 {
   public static void main(String[] args) {
       //创建2维数组 11行11列   12赋值1 23赋值2 有效值为1 2
       int[][] array= new int[11][11];
       array[1][2] = 1;
       array[2][3] = 2;
       int sum = 0;//判断二维数组的有效值
       System.out.println("输出原始数组:");
       for (int[] ints : array) {//增强for循环输出
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
               if (anInt != 0){
                   sum++;
              }
          }
           System.out.println();//换行
      }


       //转换为稀疏数组
       int[][] array1 = new int[sum+1][3];  //先创建一个稀疏数组
       array1[0][0] = 11;
       array1[0][1] = 11;
       array1[0][2] = sum;
       int count = 0;//记录出现了第几个有效值 初始化为0 当遇见非0的就+1 也代表了在稀疏数组中的行数

       //遍历二维数组 将非0的数存放到稀疏数组中
       System.out.println("=======================");
       System.out.println("稀疏数组如下:");
       for (int i = 0; i < array.length; i++) {
           for (int j = 0; j < array[i].length; j++) {
               if (array[i][j] != 0){
                   count++;//出现了有效值就++
                   array1[count][0] = i;//记录行数
                   array1[count][1] = j;//记录列数
                   array1[count][2] = array[i][j];//记录有效值
              }
          }
      }
       for (int i = 0; i < array1.length; i++) {//输出稀疏数组
           for (int j = 0; j < array1[i].length; j++) {
               System.out.print(array1[i][j]+"\t");
          }
           System.out.println();
      }
       System.out.println("=================================");
       //还原稀疏数组
       int[][] array2 = new int[array1[0][0]][array1[0][1]];//创建稀疏数组所记录的大小的数组
       for (int i = 1; i < array1.length; i++) {//遍历稀疏数组,并且为array2赋值
           array2[array1[i][0]][array1[i][1]] = array1[i][2];//赋值
      }
       for (int i = 0; i < array2.length; i++) {//输出array2数组 还原完成
           for (int j = 0; j < array2[i].length; j++) {
               System.out.print(array2[i][j]+"\t");
          }
           System.out.println();
      }
  }
}

 

 

 

posted @ 2021-06-01 16:56  Dudo1  阅读(91)  评论(0)    收藏  举报