/**
* @className SparseArray
* @author JopenChen
* @date 2020-09-07 19:51
* @description 稀疏数组
*/
public class SparseArray {
public static void main(String[] args) {
// 创建原始二维数组,并初始化原始数组
int[][] originalArray = new int[10][10];
originalArray[2][3] = 5;
originalArray[2][8] = 4;
originalArray[4][9] = 9;
originalArray[5][8] = 24;
// 遍历打印
System.out.println("原始数组:");
for (int[] row : originalArray) {
for (int col : row) {
System.out.printf("%d\t", col);
}
System.out.println();
}
// 数组变化的记录数
int recordSum = 0;
// 遍历获取记录数
for (int row[] : originalArray) {
for (int col : row) {
if (col != 0) {
recordSum ++;
}
}
}
// 创建稀疏数组
int[][] sparseArray = new int[recordSum + 1][3];
int count = 0;
sparseArray[count][0] = originalArray.length;
sparseArray[count][1] = originalArray[0].length;
sparseArray[count][2] = recordSum;
// 遍历转化为稀疏数组
for (int i = 0; i < originalArray.length; i ++){
for (int j = 0; j < originalArray[i].length; j ++){
if (originalArray[i][j] != 0){
count ++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = originalArray[i][j];
}
}
}
// 遍历打印
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
for (int col : row) {
System.out.printf("%d\t", col);
}
System.out.println();
}
// 还原数组
int[][] restoreArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i ++) {
restoreArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 遍历打印
System.out.println("还原数组:");
for (int[] row : restoreArray) {
for (int col : row) {
System.out.printf("%d\t", col);
}
System.out.println();
}
double compression = (double) (sparseArray.length * sparseArray[0].length) / (originalArray.length * originalArray[0].length);
System.out.println("压缩率为:" + compression + "%");
}
}
运行结果: