/**
* @author cnkeysky
*/
public class SparseArray {
public static void main(String[] args) {
int[][] arr = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 1;
System.out.println("普通数组===========");
printArr(arr);
System.out.println("稀疏数组============");
int[][] sparseArr = covertToSparseArr(arr);
printArr(sparseArr);
System.out.println("普通数组===========");
int[][] temp = covertToArr(sparseArr);
printArr(temp);
}
public static int[][] covertToArr(int[][] sparseArr) {
int rowLen = sparseArr[0][0];
int colLen = sparseArr[0][1];
int count = sparseArr[0][2];
int[][] arr = new int[rowLen][colLen];
for (int i = 1; i <= count; ++i) {
int row = sparseArr[i][0];
int col = sparseArr[i][1];
int val = sparseArr[i][2];
arr[row][col] = val;
}
return arr;
}
public static int[][] covertToSparseArr(int[][] arr) {
int rowLen = arr.length;
int colLen = arr[0].length;
int count = getNumOfNonzero(arr);
int[][] sparseArr = new int[count + 1][3];
sparseArr[0][0] = rowLen;
sparseArr[0][1] = colLen;
sparseArr[0][2] = count;
initSparseArr(sparseArr, arr);
return sparseArr;
}
public static void initSparseArr(int[][] sparseArr, int[][] arr) {
int index = 1;
int rowLen = arr.length;
int colLen = arr[0].length;
for (int row = 0; row < rowLen; ++row) {
for (int col = 0; col < colLen; ++col) {
if (arr[row][col] != 0) {
sparseArr[index][0] = row;
sparseArr[index][1] = col;
sparseArr[index][2] = arr[row][col];
++index;
}
}
}
}
public static int getNumOfNonzero(int[][] arr) {
int count = 0;
for (int[] row : arr) {
for (int col : row) {
if (col != 0) {
++count;
}
}
}
return count;
}
public static void printArr(int[][] arr) {
for (int[] row : arr) {
for (int col : row) {
System.out.printf("%2d ", col);
}
System.out.println();
}
}
}
稀疏数组
最新推荐文章于 2021-09-17 19:27:03 发布
本文介绍了一种将普通二维数组转换为稀疏数组的方法,通过统计非零元素并存储其位置和值,实现对大型稀疏数据的有效管理和节省存储空间。文章详细展示了稀疏数组的创建过程及如何从稀疏数组还原回普通数组。

9369

被折叠的 条评论
为什么被折叠?



