数据结构与算法01 稀疏数组

稀疏数组问题

数据结构与算法01 稀疏数组_第1张图片

 

当一个二维数组中大部分数据都是0,对这个数组直接进行存储会很浪费空间,因此利用稀疏数组进行压缩,稀疏数组第一行的第一个元素是原二维数组行数。,第一行的第二个元素是原二维数组的列数,如图为11行11列有2个有效值。

普通二维数组-->稀疏数组

思路:创建一个11*11的普通二维数组arr1,其中arr1[1][2]=1,arr1[2][3]=2,其余元素均为0。

Java代码:

        //原数组11*11
        int[][] array1 = new int[11][11];
        int sum=0;//非0元素的个数
        array1[1][2] = 1;
        array1[2][3] = 2;
        for (int[] row : array1) {
            for (int data : row) {
                System.out.print(data+"\t");
                if(data!=0){sum++;}
            }
            System.out.println('\n');
        }
        //创建稀疏数组
        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<11;i++){
            for(int j=0;j<11;j++){
                if(array1[i][j]!=0){
                    count++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array1[i][j];

                }
            }
        }
        //打印稀疏数组
        for (int[] row : array2) {
            for (int data : row) {
                System.out.print(data+"\t");
            }
            System.out.println('\n');
        }

稀疏数组-->还原成普通二维数组

思路:首先从稀疏数组读取到原数组是几行几列的,接着读出有效值所在的行列并赋值给我们新创建的数组即可

Java代码:

  //还原,稀疏数组->原数组
        int m=array2[0][0];//11
        int n=array2[0][1];//11
        int[][] array3=new int[m][n];

        for(int i=1;i

汇总代码:

package SparseArray;
public class SparseArray {
    public static void main(String[] args) {
        //原数组11*11
        int[][] array1 = new int[11][11];
        int sum=0;//非0元素的个数
        array1[1][2] = 1;
        array1[2][3] = 2;
        for (int[] row : array1) {
            for (int data : row) {
                System.out.print(data+"\t");
                if(data!=0){sum++;}
            }
            System.out.println('\n');
        }
        //创建稀疏数组
        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<11;i++){
            for(int j=0;j<11;j++){
                if(array1[i][j]!=0){
                    count++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array1[i][j];
                }
            }
        }
        //打印稀疏数组
        for (int[] row : array2) {
            for (int data : row) {
                System.out.print(data+"\t");
            }
            System.out.println('\n');
        }
        //还原,稀疏数组->原数组
        int m=array2[0][0];//11
        int n=array2[0][1];//11
        int[][] array3=new int[m][n];
        for(int i=1;i

每日打卡一道数据结构与算法!!冲刺一百天,我要进大厂!!冲呀!!

你可能感兴趣的:(数据结构与算法,数据结构,算法,java)