public class SparseArray {
public static void main(String[] args) {
int[][] oldArray = new int[11][11];
oldArray[1][2] = 1;
oldArray[2][3] = 2;
int[][] sparse = saveArray(oldArray);
int[][] newArr = readArray(sparse);
printArr(newArr);
}
private static int[][] readArray(int[][] sparse) {
int[][] newArr = new int[sparse[0][0]][sparse[0][1]];
for (int i = 1; i < sparse.length; i++) {
newArr[sparse[i][0]][sparse[i][1]] = sparse[i][2];
}
return newArr;
}
private static int[][] saveArray(int[][] oldArray) {
printArr(oldArray);
int rowLength = oldArray.length;
int colLength = oldArray[0].length;
int sum = 0;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if(0 != oldArray[i][j]){
sum++;
}
}
}
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = rowLength;
sparseArray[0][1] = colLength;
sparseArray[0][2] = sum;
int sparseRow = 1;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if(0 != oldArray[i][j]){
sparseArray[sparseRow][0] = i;
sparseArray[sparseRow][1] = j;
sparseArray[sparseRow][2] = oldArray[i][j];
sparseRow++;
}
}
}
return sparseArray;
}
private static void printArr(int[][] arr) {
for (int[] row : arr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}
【数据结构】稀疏数组实现,存在问题:当有效值过多,稀疏数组反而会消耗性能
最新推荐文章于 2026-06-20 21:44:23 发布
本文介绍了一种将二维数组转换为稀疏数组的方法,并演示了如何通过实例进行转换及还原的过程。首先定义了一个包含非零元素的二维数组,接着通过saveArray方法将其转化为稀疏数组形式以节省存储空间,最后利用readArray方法从稀疏数组中恢复原始二维数组。文中还提供了打印数组的辅助函数以便直观展示数组变化。

36

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



