数组转为稀疏数组
哎呀,稀疏数组这东西,乍一看像是数组的“瘦身”版,但实际上它可是个存储小能手!想象一下,你有一个10x10的二维数组,里面大部分都是0,只有几个角落有数字。这时候,稀疏数组就能大显身手了。它只存储非零元素的位置和值,大大节省了空间。这不就是“省内存、高效率”的典范吗?
但问题是,稀疏数组真的适用于所有场景吗?如果你的数组满当当都是数字,稀疏数组反而会变成“累赘”。所以,关键是要看数据的分布情况。稀疏数组最适合那些“稀疏”的场合,比如棋盘游戏、科学计算中的稀疏矩阵等。
这里还有一个有趣的思考:稀疏数组的压缩和解压缩过程,其实就像数据的“隐形传送”。我们先把有用的信息打包(压缩),到了目的地再恢复原样(解压缩)。这不正是我们处理大数据时的核心思路吗?所以,稀疏数组不仅仅是节省空间,更是数据处理的一种艺术。
public class SparseArray {public static final int NUM=10;//常量定义数组大小public int[][] chees ;//表示原数组public int[][] sparse;//表示稀疏数组public int[][] chees2;//表示恢复后的数组public int sum;//记录非零数字个数//创建一个初始的二维数组public void setChees(int chees[][]) {chees[1][2]=1;chees[2][3]=2;chees[1][6]=2;chees[0][0]=2;}//创建对应的稀疏数组public void cheestosparse(int[][] chees,int sparse[][]) {//给稀疏数组赋值sparse[0][0]=NUM;sparse[0][1]=NUM;sparse[0][2]=sum;int count=0;//count用于记录第几个非零数据for(int i=0;i<NUM;i++) {for(int j=0;j<NUM;j++) {if(chees[i][j]!=0) {count++;sparse[count][0]=i;sparse[count][1]=j;sparse[count][2]=chees[i][j];}}}}//将稀疏数组恢复成原始的二维数组public void sparse2chees(int[][] sparse,int[][] chees2) {for(int i=1;i<sparse.length;i++) {chees2[sparse[i][0]][sparse[i][1