重学java数据结构--稀疏数组(SparseArray)

定义

稀疏数组,简单描述就是:当一个数组(以二维为例)中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。所以当出现这种情况的时候,我们可以将数组进行改变结构,具体方法是:
1)记录数组一共有几行几列,有多少个不为零的值
2)把具有不为零的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
如图(这里用一下尚硅谷的图dddd(手动doge)):
在这里插入图片描述

实现程序:

public class sparsearray {
    public static void main(String[] args) {
        //1.先创建一个正常的数组并填写数字
        int normalArr[][] = new int[10][10];
        normalArr[5][4] = 21;
        normalArr[7][0] = 85;
        normalArr[0][9] = 7;
        //2.遍历原来的数组得到不为零的那些值的个数
        int sum = count(normalArr);
        //3.根据不为零数据的个数创建稀疏数组
        int SparseArray[][] = new int[sum+1][3];//这里取sum+1的是因为需要一行将原数组的大小(几行几列)也记录下来
        SparseArray[0][0] = 10;
        SparseArray[0][1] = 10;
        SparseArray[0][2] = sum;
        //4.将有效数据存储进去
        int loc = 1;//用于记录存储了几个数据
        for (int i = 0; i < 10; i++){
            for (int j = 0; j < 10; j++){
                if (normalArr[i][j] != 0){
                    SparseArray[loc][0] = i;
                    SparseArray[loc][1] = j;
                    SparseArray[loc][2] = normalArr[i][j];
                    loc++;
                }
            }
        }
        for (int[] a: SparseArray){
            for (int b : a){
                System.out.print(b+" ");
            }
            System.out.println();
        }

    }


    public static int count(int[][] normalArr){
        int sum = 0;
        for (int[] a: normalArr){
            for (int b: a){
                if (b != 0) sum++;
            }
        }
        return sum;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值