当一个二维数组中,大部分的元素为同一值时,可以转化为稀疏数组。
例如:
在图中我们可以看到:下边为大多数为0的一个二维数组,上边为转化后的稀疏数组。上边的稀疏数组的列始终为3,稀疏数组第一行分别为原数组的行、列、原始数组中不为0的个数。当在原始数组中,找到一个不为0 的值时,将其行、列、值加入到稀疏数组当中,依次进行。
以下用java代码实现从原始数组转换为稀疏数组:
static int[][] NormalArrayToSparseArray(int[][] normalArray){
int num=0;
int row=normalArray.length;
int line=normalArray[0].length;
for(int i=0;i<row;i++) {
for(int j=0;j<line;j++) {
if(normalArray[i][j]!=0) {
num++;
}
}
}
int[][] sparseArray=new int[num+1][3];
sparseArray[0][0]=row;
sparseArray[0][1]=line;
sparseArray[0][2]=num;
int t=1;
for(int i=0;i<row;i++) {
for(int j=0;j<line;j++) {
if(normalArray[i][j]!=0) {
sparseArray[t][0]=i;
sparseArray[t][1]=j;
sparseArray[t][2]=normalArray[i][j];t++;
}
}
}
return sparseArray;
}
稀疏数组转换为原始数组:
static int[][] SparseArrayToNormalArray(int[][] SparseArray){
int row=SparseArray[0][0];
int line=SparseArray[0][1];
int length=SparseArray.length;
int[][] NormalArray=new int[row][line];
for(int i=1;i<length;i++) {
NormalArray[SparseArray[i][0]][SparseArray[i][1]]=
SparseArray[i][2];
}
return NormalArray;
}
参考于尚硅谷数据结构与算法java