稀疏数组,作为压缩普通数组的一种方式
import java.util.Arrays;
/**
* 1、原数组的行数,列数,非0数据个个数
* 2、所有非0数据个坐标(row,column)
*/
public class SparseArray {
public static int[][] toSparseArray(int[][] array) {
// 找到所有非0的数据个数
int valueCount = 0;
for (int i = 0 ;i < array.length; i ++) {
for(int j = 0 ;j < array[i].length; j ++) {
int value = array[i][j];
if (value != 0) {
valueCount++;
}
}
}
// 初始化稀疏素组第一行数据,记录原始数组的 row/column/valueCount
int[][] sparseArray = new int[valueCount + 1][3];
sparseArray[0][0] = array.length;
sparseArray[0][1] = array[0].length;
sparseArray[0][2] = valueCount;
// 稀疏素组所有非0数据的坐标
int index = 0;
for (int i = 0 ;i < array.length; i ++) {
for(int j = 0 ;j < array[i].length; j ++) {
int value = array[i][j];
if (value != 0) {
index++;
sparseArray[index][0] = i;
sparseArray[index][1] = j;
sparseArray[index][2] = value;
}
}
}
return sparseArray;
}
public static int[][] toArray(int[][] sparseArray) {
//根据第一行数据,初始化原始数组的
int[][] array = new int[sparseArray[0][0]][sparseArray[0][1]];
// 赋值
for (int i = 1 ; i < sparseArray.length; i ++) {
int row = sparseArray[i][0];
int column = sparseArray[i][1];
int value = sparseArray[i][2];
array[row][column] = value;
}
return array;
}
public static void main(String[] args) {
int originalArray[][] = new int [7][8];
originalArray[0][1] = 8;
originalArray[1][2] = 9;
toString(originalArray);
int[][] sparseArray = toSparseArray(originalArray);
toString(sparseArray);
int[][] array = toArray(sparseArray);
toString(array);
}
private static void toString(int[][] array) {
for (int i = 0 ;i < array.length; i ++) {
System.out.println(Arrays.toString(array[i]));
}
}
}