2021-07-02

六 JAVA学习系列之稀疏数组

稀疏数组可以对数组进行简单的压缩,保留其中的非零数字
编辑思路如下:
以一个11*11的数组为例,数组如下
在这里插入图片描述
很明显在图片中,有效数字的个数为2,分别位于第一行第二列,以及第二行第三列,其他位置都为0.对于此种的数组进行转化为稀疏数组,如下:
在这里插入图片描述
第一行为数组的整体信息,表示为11行11列的数组,且具有两个非0数字
鉴于具有两个非0的数字,因此需要对上述两个非零的数字的具体信息加以记载
第二行记载的为第一个有效数字的位子以及大小。
第三行记载的为第二个有效数字的位子以及大小。
原理如上所示,那么代码实现如下:

//创建11*11的数组
//满足第一行第二列数字为1,第二行第三列数字为2
//其余数字为0

public class array {
    public static void main(String[] args) {
        int [] [] array1=new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
      //输出原始数组
        for (int[] ints : array1){
            for(int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println( );
        }
        System.out.println("输出原始数组:");
        //遍历输出数组中全部元素
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                System.out.print(array1[i][j]);
                System.out.print(' ');
                if(j==10){
                    System.out.print('\n');
                }

            }

        }
        //转换为稀疏数组
        //获取有效值的个数
        int sum=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
             if(array1[i][j]!=0){
                 sum++;}
            }
        }
        System.out.print("输出有效值的个数为:"+sum);
        //转换为稀疏数组
        int[][]array2=new int[sum+1][3];
       array2[0][0]=11;
       array2[0][1]=11;
       array2[0][2]=sum;
       //遍历二维数组,将非零值存入稀疏数组
        int count=0;
        for (int i=0;i<array1.length;i++){
            for (int j=0;j<array1[i].length;j++)
            {
                if (array1[i][j]!=0)
                {
                count++;
                array2[count][0]=i;
                array2[count][1]=j;
                array2[count][2]=array1[i][j];
                }
            }
        }
        //输出稀疏数组的形式
        System.out.println("输出稀疏数组:");
        for (int i=0;i<array2.length;i++){
            for (int j=0;j<array2.length;j++)
            {
                System.out.print(array2[i][j]+" ");
                if (j== array2.length-1){
                    System.out.print('\n');
                }
            }
        }
        //还原稀疏数组
        int[][]array3=new int[array2[0][0]][array2[0][1]];//读取整体数组的信息,建立原始数组
        //填充有效数字
        for(int i = 1;i< array2.length;i++){
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        System.out.println("输出原始数组:");
        //使用增强for循环
        for (int[] ints : array1){
            for(int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println( );
        }

    }
}

上述代码过程包含原始数组转化为稀疏数组以及再转化为原始数组
代码实现结果:
在这里插入图片描述
输出原始数组中包含了增强型FOR循环输出,以及普通的双重for循环遍历输出。
以上仅为个人见解,不足之处,多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值