美文网首页
算法之稀疏数组

算法之稀疏数组

作者: daysting | 来源:发表于2019-06-27 21:51 被阅读0次

    当一个数组的元素包含大量的0时,或者为同一个值的数组时,可以使用稀疏数组来保存数组.

    稀疏数组的处理方法:

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

    2,把具有不同值的元素的行列及值记录在一个小规模的数组(稀疏数组)中,从而缩小程序的规

    实例讲解:

    图片中的二维数组转换成稀疏数组

    二维数组转稀疏数组

    publicclassSparesArry{

        publicstaticvoidmain(String[]args) {

            intchessArry1[][]=newint[11][11];

            chessArry1[1][2]=1;

            chessArry1[2][3]=2;

            for(int[]arr:chessArry1) {

                for(intdata:arr) {

                    System.out.printf("%d\t",data);

                }

                System.out.println();

            }

            // 原始二维数组

            intsum=0;

            for(inti=0;i<chessArry1.length;i++) {

                for(intj=0;j<chessArry1.length;j++) {

                    if(chessArry1[i][j]!=0) {

                        sum++;

                    }

                }

            }

            // 遍历原始数组统计数值

            intsparesarry[][]=newint[sum+1][3];

            sparesarry[0][0]=11;// 行数

            sparesarry[0][1]=11;// 列数

            sparesarry[0][2]=sum;// 统计数

            // 遍历数组存值,讲原数组信息存贮到稀疏数组里

            intcount=0;

            for(inti=0;i<chessArry1.length;i++) {

                for(intj=0;j<chessArry1.length;j++) {

                    if(chessArry1[i][j]!=0) {

                        count++;

                        sparesarry[count][0]=i;

                        sparesarry[count][1]=j;

                        sparesarry[count][2]=chessArry1[i][j];

                    }

                }

            }

            System.out.println();

            // 打印稀疏数组

            for(intc=0;c<sparesarry.length;c++) {

                System.out.printf("%d\t%d\t%d\t\n",sparesarry[c][0],sparesarry[c][1],sparesarry[c][2]);

            }

            System.out.println();

            // 将稀疏数组还原成原数组

            // 1.先读取稀疏数组第一行,根据第一行数据信息,创建出二维数组

            // 2/读取稀疏数组后面几行,并将数据添加到二维数组中

            intchessArry2[][]=newint[sparesarry[0][0]][sparesarry[0][1]];

            for(inti=1;i<sparesarry.length;i++) {// 从第二行开始读取数据

                chessArry2[sparesarry[i][0]][sparesarry[i][1]]=sparesarry[i][2];

            }

            System.out.println();

            for(int[]arr:chessArry2) {

                for(intdata:arr) {

                    System.out.printf("%d\t",data);

                }

                System.out.println();

            }

        }

    }

    相关文章

      网友评论

          本文标题:算法之稀疏数组

          本文链接:https://www.haomeiwen.com/subject/hjwhcctx.html