稀疏数组
特殊的数据结构,其特点是大部分元素为同一值。
适用场景
处理方式
以二维数组为例:
● 遍历原始二维数组,查询出不同的值
● 稀疏数组列数固定为3
● 第一行记录原始二维数组的行数、列数、不同值的个数
● 第二行开始记录不同值的行索引、列索引、值
代码实现
package org.example.data.structure.sparsearray;
/**
* 稀疏数组, 包含两部分实现:
* 1. 将11*11的二维数组包含(1,2),(2,3)的数据保存至稀疏数组中
* 2. 将1中的稀疏数组还原至原来的数组
*
* @author xzy
* @since 2024/8/25 9:27
*/
public class SparseArray {
public int[][] convertToSparseArray(int[][] simpleArray) {
// 省略判空条件
int sum = 0;
for (int[] ints : simpleArray) {
for (int anInt : ints) {
if (anInt != 0) {
sum++;
}
}
}
// 稀疏数组针对二维数组, 列数固定为3. 初始化二维数组
int[][] sparseArray = new int[sum + 1][3];
// 初始化第一行
sparseArray[0][0] = simpleArray.length;
sparseArray[0][1] = simpleArray[0].length;
sparseArray[0][2] = sum;
int index = 1;
for (int i = 0; i < simpleArray.length; i++) {
for (int j = 0; j < simpleArray[i].length; j++) {
if (simpleArray[i][j] != 0) {
sparseArray[index][0] = i;
sparseArray[index][1] = j;
sparseArray[index][2] = simpleArray[i][j];
index++;
}
}
}
return sparseArray;
}
public int[][] convertToSimpleArray(int[][] sparseArray) {
// 省略判空
int row = sparseArray[0][0];
int col = sparseArray[0][1];
int[][] simpleArray = new int[row][col];
// 填充二维数组
for (int i = 1; i < sparseArray.length; i++) {
int rowIndex = sparseArray[i][0];
int colIndex = sparseArray[i][1];
simpleArray[rowIndex][colIndex] = sparseArray[i][2];
}
return simpleArray;
}
}
源码与测试案例
- Gitee地址