定义:一个无效数据量(0)远大于有效数据量的二维数组被称为稀疏数组。
对于一个稀疏数组,我们可以通过特定的方式对其进行压缩,以节省存储空间。
例如:
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 2 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
就可以转换成如下的形式:
11 11 3
1 2 1
2 3 2
3 5 2
在上面的数组中,第一行的三个数依次表示原稀疏数组的【行数】,【列数】和【非零值数量】,从第二行开始,每行的三个数依次表示原稀疏数组中非零值的【所在行】,【所在列】和【值】。
以下是对稀疏数组压缩的一个实现:
import java.io.*;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @Author JedeWang
* @Version 1.0
* @Date 2022/2/26-20:16
* @Since jdk1.8
* @Description
*/
public class SparseArray {
/**
* 将一个稀疏数组压缩
*
* @param array 要压缩的稀疏数组
* @return 压缩后的数组
*/
public int[][] compress(int[][] array) {
AtomicInteger sum = new AtomicInteger();
traverse2dArray(array, (i, j, ele) -> {
if (ele != 0) {
sum.getAndIncrement();
}
}
);
int[][] result = new int[sum.get()