稀疏数组就是将普通二维数组压缩节省空间的一种做法
!!!适用情况:二维数组中大部分为同一个值(0),有效数据没几个!!!
比如
只有a[1][2]和a[2][3]是有用的数据
转换为稀疏数组就是
行 列 值
[0] 11 11 2
[1] 1 2 1
[2] 2 3 2
假设c为稀疏数组
c[0][0]储存对应数组的行数
c[0][1]储存对应数组的列
c[0][2]储存对应数组有几个有效值
c[n][0]储存第n个有效值在第几行
c[n][1]储存第n个有效值在第几列
c[n][2]储存第n个有效值的值是多少
普通数组转换为稀疏数组
//转化为稀疏数组
//先获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (a[i][j] != 0){
sum ++;
}
}
}
System.out.println("有效值的个数为:" + sum);
//创建稀疏数组
int[][] b = new int[sum+1][3];
b[0][0] = 11;
b[0][1] = 11;
b[0][2] = sum;
//遍历二维数组,将非0的值存放到稀疏数组
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0){
count++;
b[count][0] = i;
b[count][1] = j;
b[count][2] = a[i][j];
}
}
}
将稀疏数组还原
int[][] c = new int[b[0][0]][b[0][1]];
//还原数组的值
for (int i = 1; i <b.length ; i++) {
c[b[i][0]][b[i][1]] = b[i][2];
}