public class Sparse {
public static void main(String[] args) {
// 稀疏数组的目的是为了减少无意义的数组元素
/*0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0*/
// 将上述内容转变成稀疏数组(本质是二维数组,我们可以看做一个矩阵如下)
/* 11 11 2 (几行几列几个有效数字)
* 1 2 1 (哪一行哪一列的哪个数字)
* 2 4 2 (哪一行哪一列的哪个数字)
* */
int[][] arr = new int[11][11];
arr[1][2] = 1;
arr[2][4] = 2;
// 生成稀疏数组
int[][] sparseArr = new int[3][3];
int count = 0;
// 拼凑sparseArr[0]
sparseArr[0][0] = arr.length;
sparseArr[0][1] = arr[0].length;
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[0].length; j++){
if(arr[i][j] != 0){
count += 1; // 记录有多少个有效数字(所以稀疏数组有count + 1行,3列)
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
sparseArr[0][2] = count;
// 打印一下验证对不对
for(int p = 0; p < 3; p++){
System.out.println(sparseArr[p][0] + "\t" + sparseArr[p][1] + "\t" + sparseArr[p][2] + "\t");
}
// -----------------还原稀疏数组 (补0)
int[][] originArr = new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i = 1; i <= sparseArr[0][2]; i++){
originArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 打印验证
for(int[] x: originArr){
for(int y: x){
System.out.print(y+"\t");
}
System.out.println();
}
}
}
原文:https://www.cnblogs.com/wchjdnh/p/14401319.html