• 稀疏数组和二维数组的转换


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

    稀疏数组的处理方法:

    1. 记录数组一共有几行几列,有多少个不同的值
    2. 把具有不同元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

    用例:

     java代码如下:

     1 public class SparseArray {
     2 
     3     public static void main(String[] args) {
     4         //创建原始二位数组11*11
     5         //0:表示没有棋子 1 黑子 2蓝子
     6         int chessArr1[][] = new int[11][11];
     7         chessArr1[1][2] =1;
     8         chessArr1[2][3] =2;
     9         System.out.println("原始的二维数组:");
    10         for (int[] row : chessArr1) {
    11             for (int data : row) {
    12                 System.out.printf("%d	",data);
    13             }
    14             System.out.println();
    15         }
    16         // 1.先遍历二维数组得到非0数据的个数
    17         int sum = 0;
    18         for (int i = 0; i < 11; i++) {
    19             for (int j = 0; j < 11; j++) {
    20                 if(chessArr1[i][j]!=0){
    21                     sum++;
    22                 }
    23             }
    24         }
    25         System.out.println("sum=="+sum);
    26         //2.创建对应的稀疏数组
    27         int sparseArr[][] = new int[sum+1][3];
    28         //给稀疏数组赋值
    29         sparseArr[0][0] = 11;
    30         sparseArr[0][1] = 11;
    31         sparseArr[0][2] = sum;
    32         
    33         //先遍历二维数组 把非0数据存放在sparseArr中
    34         int count = 1;//用于记录第几个非0数字
    35         for (int i = 0; i < 11; i++) {
    36             for (int j = 0; j < 11; j++) {
    37                 if(chessArr1[i][j]!=0){
    38                     sparseArr[count][0] = i;
    39                     sparseArr[count][1] = j;
    40                     sparseArr[count][2] = chessArr1[i][j];
    41                     count++;
    42                 }
    43             }
    44         }
    45         
    46         //输出稀疏数组
    47         System.out.println("得到的稀疏数组:");
    48         for (int i = 0; i < sparseArr.length; i++) {
    49             System.out.printf("%d	%d	%d	
    ",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
    50         }
    51         
    52         //3.将稀疏数组转换成二维数组
    53         //读取稀疏数组第一行给二维数组赋值
    54         int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
    55         //读取稀疏数组后几行给二维数组赋值
    56         for (int i = 1; i < sparseArr.length; i++) {
    57             chessArr2[sparseArr[i][0]][sparseArr[i][1]]= sparseArr[i][2];
    58         }
    59         System.out.println();
    60         System.out.println("恢复后的二维数组");
    61         for (int[] row : chessArr2) {
    62             for (int data : row) {
    63                 System.out.printf("%d	",data);
    64             }
    65             System.out.println();
    66         }
    67         
    68     }
    69 }
    test

    显示结果:

    原始的二维数组:
    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    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    0    
    sum==2
    得到的稀疏数组:
    11    11    2    
    1    2    1    
    2    3    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    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   0
  • 相关阅读:
    检测c/c++中内存泄露
    在一个集合S中寻找最大的C使A+B=C且A,B,C均在集合当中
    《为学》
    U盘windows无法格式化的解决办法
    java.lang.AbstractMethodError: oracle.jdbc.driver...解决方法
    sqlplus连接远程Oracle
    oracle字符集导致的乱码问题
    大端与小端存储模式详解
    《劝学》原文
    《报任安书》司马迁
  • 原文地址:https://www.cnblogs.com/cai170221/p/13388203.html
Copyright © 2020-2023  润新知