zoukankan      html  css  js  c++  java
  • 稀疏数组和二维数组的转换

     当一个少数组中大部分元素为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
  • 相关阅读:
    pyspark创建RDD数据、RDD转DataFrame以及保存
    pyspark将DataFrame转成table以及操作sql语句
    pyspark读取textfile形成DataFrame以及查询表的属性信息
    sql-lab闯关之20-22
    sql-lib闯关之lesson17-19
    sql-lab闯关之13-16
    sql-lab闯关之11-12
    sql-lib闯关之lesson8-10
    sql-lab闯关之7
    sql-lib闯关之5-6
  • 原文地址:https://www.cnblogs.com/cai170221/p/13388203.html
Copyright © 2011-2022 走看看