算法-稀疏数组

4 篇文章 0 订阅
4 篇文章 0 订阅

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

稀疏数组的处理方法:

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

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

实例讲解:
图片中的二维数组转换成稀疏数组
在这里插入图片描述

二维数组转稀疏数组


    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();

        }

    }

}

​
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值