Java稀疏数组

稀疏数组

假设有这样一个二维数组:

0 0 0 0 0 1 0 2 0 0
8 0 0 0 0 0 9 0 6 0
-5 0 0 0 6 0 7 0 0 0
0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 5 8
9 0 0 0 0 0 0 0 0 0

不难看出数组中有大量的 0存在,非0的值不多,仅仅12 个,但是这样的数组的大小为6*10,空间利用率仅为14/60=23.3%;于是考虑是否可以以更低的代价存储这些值。

考虑使用这样一个新数组,第一行存储原数组的大小和有效值个数,后续行存储有效值的坐标和值;原数组6*10,新稀疏数组 13*3,空间缩小了21,假设这样的数组有10个,100个,那么带来的收益将很可观。

6 10 12
0 5 1
0 7 2
1 0 8
1 6 9
1 8 6
2 0 -5
2 4 6
2 6 7
4 0 2
4 8 5
4 9 8
5 0 9

主要代码实现:

int [][]arr=new int[6][10];
int [][]arr2=new int[13][3];
int count=0;
arr2[0][0]=6;
arr2[0][1]=10;
arr2[0][2]=12;
for(int i=0;i<6;i++)
    for(int j=0;j<10;j++)
        if(arr[i][j]!=0){          
            arr2[++count][0]=i;
			arr2[count][1]=j;
			arr2[count][2]=arr[i][j];
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值