稀疏数组小结

使用稀疏数组的原因:有些数组的元素(一般是0,在此以0为例)有太多个相同,太浪费资源

一、介绍稀疏数组

1、行数取决于不为零的个数 + 1,列数固定为3列
2、第一行用于保存原先数组的行数,列数,不为零的个数
3、以第二行为例子,第一列保存原先数组的行坐标,第二列保存原先数组的列坐标,第三列保存原先数组的值

二、构造稀疏数组的过程

以下图数组为例子

一、统计原数组不为零的个数

        int sum = 0;
        for (int i = 0; i < 11; i++)
        {
            for (int j = 0; j < 11; j++) {
                if (array1[i][j] != 0) {
                    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];
                }
            }

        }

四、稀疏数组还原为原来的数组

1、首先确定原先数组的行数和列数
2、根据系数数组第一列表示行坐标,第二列表示列坐标,第三列表示原先值进行还原

        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];
        }
posted @ 2022-07-29 22:51  随风飘向天边  阅读(30)  评论(0)    收藏  举报