zoukankan      html  css  js  c++  java
  • 二维数组转成稀疏数组代码实现

     public static void main(String[] args) {
            /*
             * 二为数组转稀疏数组的思路
             * 1.遍历 原始的二维数组,得到有效数据的个数sum
             * 2.根据sum就可以创建 稀疏数组 sparseArr int[sum+1][3]
             * 3.将二维数组的有效数数据存入到稀疏数组
             * */
            //创建一个11行11列的棋盘
            int[][] chessArr1 = new int[11][11];
            //1代表黑 2代表百 0代表无
            chessArr1[1][2] = 1;
            chessArr1[2][3] = 2;
            chessArr1[4][5] = 2;
    
            for (int[] row : chessArr1) {
                for (int data : row) {
                    System.out.print("\t" + data);
                }
                System.out.println();
            }
    
            //稀疏数组  行不确定列确定(行 sum+1 )(列永远都是3  row  col var)
            /**
             * 将二维数据转换为稀疏数组的思路
             * 1.先遍历二维数组得到非零有效数据的个数
             */
            //记录非零的数据
            int sum = 0;
            for (int i = 0; i < chessArr1.length; i++) {
                for (int j = 0; j < chessArr1.length; j++) {
                    if (chessArr1[i][j] != 0) {
                        sum++;
                    }
                }
            }
            System.out.println("非零数据的个数是" + sum);
    
            //创建对应的稀疏数组
            int[][] sparseArr = new int[sum + 1][3];
            //给稀疏数组赋值
            sparseArr[0][0] = chessArr1.length;//存储原始数组的行长度
            sparseArr[0][1] = chessArr1.length;//存储原始数组的列长度
            sparseArr[0][2] = sum;//存储原始数组的数据
    
            //遍历二维数组,将非零数据存储到cparseArr数组中
            int count = 0;//用于记录是第几个是非零数据
            for (int i = 0; i < chessArr1.length; i++) {
                for (int j = 0; j < chessArr1.length; j++) {
                    if (chessArr1[i][j] != 0) {
                        count++;
                        sparseArr[count][0] = i;//获取行
                        sparseArr[count][1] = j;//获取列
                        sparseArr[count][2] = chessArr1[i][j];//获取值
                    }
                }
            }
    
            System.out.println("得到的稀疏数组为:");
            for (int i = 0; i < sparseArr.length; i++) {
                System.out.print(sparseArr[i][0] + "\t" + sparseArr[i][1] + "\t" + sparseArr[i][2] + "\n");
            }
            System.out.println();
    
            //将稀疏数组恢复成原始的二维数组的思路
            /*
             * 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2=int[11][11]
             * 2.在读取稀疏数组后几行的数据,并赋给 原始的二维数组即可
             * */
    
            //先读取一行创建原来的稀疏数组
            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("回复的原始棋盘为:");
            for (int[] ints : chessArr2) {
                for (int i : ints) {
                    System.out.print(i + "\t");
                }
                System.out.println();
            }
        }
    }
    

    运行结果

        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   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
    非零数据的个数是3
    得到的稀疏数组为:
    11  11  3
    1   2   1
    2   3   2
    4   5   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   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
    
  • 相关阅读:
    vue使用laydate.js插件报错laydate.css: Invalid
    自定义css样式结合js控制audio做音乐播放器
    福利福利~262集前端免费视频!
    解决Vue在IE中报错出现不支持=>等ES6语法和“Promise”未定义等问题
    设置Chart.js默认显示Point点的值不用鼠标经过才显示
    js监听某个元素高度变化来改变父级iframe的高度
    Vue中注意target和currentTarget的使用
    VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化
    bootstrap-table前端实现多条件时间段查询数据
    js小数点相乘或相除出现多位数的问题
  • 原文地址:https://www.cnblogs.com/zk2020/p/13985276.html
Copyright © 2011-2022 走看看