二、数据结构与算法 稀疏数组

1.稀疏算法的目的就是储存的时候,不用储存那么多,节省空间(时间换空间)。

稀疏数组:就是无效值(可以是规定值吧,相同的比较多)比较多,很稀疏,其实就是把原来的数组(这个数组有多个相同的值,这里是0,因为默认值为0,无值的情况默认0,不用设置值,而其他的值要设置值),通过规律来创建一个新的数组(值较少,且可以按一定规律还原为原数组),然后储存起来,然后。
思路如下:
原数组–》稀疏数组–》储存–》拿出来–》还原–》使用。
在这里插入图片描述
其中下面的表示原数组在这里插入图片描述
下面的表示稀疏数组
在这里插入图片描述
在这里插入图片描述
代码(储存省略):

public class SparseArray2 {
    public static void main(String[] args) {
        int chessArr1[][]=new int[11][11];
        chessArr1[1][2]=1;
        chessArr1[2][3]=2;
        for (int[] ints : chessArr1) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        /**
         * 先获取有效值,这里是2个
         * 对整个数组进行遍历,比较是否为0,来判断值
         */
        int count=0;
        for (int[] ints : chessArr1) {
            for (int anInt : ints) {
                if (anInt!=0) {
                    count++;
                }
            }
        }
        System.out.println("\n有效值的个数:"+count);
        //设置稀疏数组的行与列
        int sparseArr[][]=new int[count+1][3];
        //todo 赋值
        //第一行的值
        sparseArr[0][0]=chessArr1.length;
        sparseArr[0][1]=chessArr1[0].length;
        sparseArr[0][2]=count;
        //剩下行的值
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr1[i][j]!=0) {
                    sparseArr[i][0]=i;
                    sparseArr[i][1]=j;
                    sparseArr[i][2]=chessArr1[i][j];
                }
            }
        }
        //打印稀疏数组
        System.out.println("打印稀疏数组");
        for (int[] ints : sparseArr) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        //todo 恢复回去
        //大致行与列
        int renew[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
        //赋值
        for (int i = 1; i < sparseArr.length; i++) {
            int i0 = sparseArr[i][0];
            int i1 = sparseArr[i][1];
            int i2 = sparseArr[i][2];
            renew[i0][i1]=i2;
        }
        System.out.println("\n打印稀疏数组还原");
        for (int[] ints : renew) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }






    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值