稀疏数组SpraseArray

127 阅读2分钟

​ 二维数组转稀疏数组的思路:

  1. 遍历二维数组,得到有效数据

  2. 数组的下标从0开始,稀疏数组三个字段名表示行,列,值 特别指出稀疏数组的第一行的三个字段名分别表示共有多少行,多少列,多少个有效值;稀疏数组的列为固定的行:[有效数据+1][3]

  3. 将二维数组的有效数据存入到稀疏数组中

​稀疏数组转化为二维数组的思路:

  1. 先读取稀疏数组的第一行,根据第一行得出二维数组的行、列和有效数据的个数

  2. 在读取稀疏数组后几行的数据赋值给原始的二维数组;


    具体的代码实现:

    package JavaSeStudy;
    /**
     * @author 野望编程小菜鸟
     * @computer smartisan
     * @create 2021-01-30  21:09
     * 创建一个原始的二维数组11行11列
     * 0:没有棋子,1:黑棋,2:白棋
     */
    public class SparseArray {
        public static void main(String[] args) {
            int chessArr1[][] = new int[11][11];
            chessArr1[1][2] = 1;
            chessArr1[2][3] = 2;
            //输出原始的二维数组
            System.out.println("原始的二维数组--------");
            for (int[] row : chessArr1) {
                for (int data : row) {
                    System.out.print(data + "\t");
                }
                System.out.println();
            }
            //将二维数组转稀疏数组的思路:
    //1.先遍历二维数组得到非0数据的个数也就是有效数字
            int sum=0;
            for (int i=0;i<11;i++){
                for (int j=0;j<11;j++){
                    if (chessArr1[i][j]!=0){
                        sum++;
                    }
                }
            }
            //2.创建对应的稀疏数组
            int sparseArr[][]=new int[sum+1][3];
            //给稀疏数组赋值
            sparseArr[0][0]=11;
            sparseArr[0][1]=11;
            sparseArr[0][2]=sum;
            //遍历二维数组将非0的值存放到稀疏数组中
            int count=0;//用于记录是第几个非0数据
            for (int i = 0; i<11; i++){
                for (int j=0;j<11;j++){
                    if (chessArr1[i][j]!=0){
                        count++;
                        sparseArr[count][0]=i;
                        sparseArr[count][1]=j;
                        sparseArr[count][2]=chessArr1[i][j];
                    }
                }
            }
            //输出稀疏数组
            System.out.println();
            System.out.println("得到的稀疏数组为:");
            for (int i =0;i<sparseArr.length;i++){
                System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
            }
            System.out.println();
            //稀疏数组转化为原始的二维数组
            int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
            //2读取稀疏数组后几行的数据并赋值
      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.print(data+"\t");
                }
                System.out.println();
            }
        }
    }
    
    
    

主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable, mk-cute, jzman, geek-black, awesome-green, qklhk-chocolate

贡献主题:github.com/xitu/juejin…

theme: juejin highlight: