思想:
当一个数组中大部分元素为0或为同一个值时,可以使用稀疏数组来保存该数组,以达到减少内存开销的目的。
步骤:
1.记录数组一共有几行几列,有多少个不同的值
2.把具有不同值的元素的行列及值记录在一个小规模的数组中
代码:
/*
* 稀疏数组的压缩存储
*
* 思想:
* 压缩后数组的第一行存储稀疏数组的行数,列数,非零值个数
* 压缩后数组的其他行存储原始数组非零值的行数,列数,值
* */
public class SparseArray {
public static void main(String[] args) {
//定义原始稀疏数组
int[][] initArray = new int [10][10];
initArray[1][2] = 1;
initArray[2][2] = 2;
//获取原始数组中非零元素个数
int num=0;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if (initArray[i][j] != 0)
num++;
}
}
//定义压缩后的数组
int[][] sparseArray = new int[num+1][3];
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = num;
int count = 0;//用来记录是第几个非零数据
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if (initArray[i][j] != 0){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = initArray[i][j];
}
}
}
//输出压缩后的稀疏数组
for(int i=0;i<=num;i++){
for(int j=0;j<3;j++){
System.out.print(sparseArray[i][j]+" ");
}
System.out.println();
}
}
}