/*
* 1.稀疏数组介绍:
* 如果原数组的非0元素的个数有n个,则稀疏数组有n+1行,列数不变,一共有三列
* 第一行保存的数据: 原始数组的行 原始数组保存的列 原始数组中非0的元素个数
* 第二行保存的数据: 第一个非0元素所在的行 第一个非0元素所在的列 第一个非0元素的值
* ..........
*
* 2.二维数组转化为稀疏数组:
* 遍历二维数组,求出原始二维数组中非0元素的个数sum
* 创建稀疏数组a[sum+1][3]
* 将原始二维数组的非0元素的值存入到稀疏数组中
*
* 3.稀疏数组恢复为原始二维数组
* 先利用稀疏数组第一行的元素创建一个二维数组
* 将稀疏数组后n-1行的元素赋值给新创建的二维数组
*
*/
public class SparseArray {
public static void main(String[] args) {
//1.创建一个原始的二维数组
int [][]array=new int[6][6];
array[1][2]=1;
array[2][1]=2;
System.out.println("原始的二维数组:");
for(int [] row:array)
{
for (int elem:row)
System.out.printf("%d ",elem);
System.out.println();
}
//2.将二维数组转化为稀疏数组
//2.1求出二维数组中非0元素的个数
int sum=0;
for(int [] row:array)
{
for (int elem:row)
if(elem!=0)
sum++;
}
//2.2创建一个稀疏数组
int sparsearray[][]=new int[sum+1][3];
sparsearray[0][0]=6;//记录行数
sparsearray[0][1]=6;//记录列数
sparsearray[0][2]=sum;//记录非0数据的个数
//2.3将原始数组中的非0元素保存到稀疏数组中
int count=0;//当前是第几个非0元素
for(int i=0;i<array.length;i++)
{
for(int j=0;j<array[i].length;j++)
{
if(array[i][j]!=0)
{
count++;
sparsearray[count][0]=i;
sparsearray[count][1]=j;
sparsearray[count][2]=array[i][j];
}
}
}
//3.输出稀疏数组
System.out.println("稀疏数组元素如下:");
for(int i=0;i<sparsearray.length;i++)
{
System.out.println(sparsearray[i][0]+" "+sparsearray[i][1]+" "+sparsearray[i][2]);
}
//4.恢复二维数组
int recoverArray[][]=new int[sparsearray[0][0]][sparsearray[0][1]];
for(int i=1;i<sparsearray.length;i++)
{
int row=sparsearray[i][0];
int line=sparsearray[i][1];
int value=sparsearray[i][2];
recoverArray[row][line]=value;
}
System.out.println("恢复后的二维数组:");
for(int [] row:array)
{
for (int elem:row)
System.out.printf("%d ",elem);
System.out.println();
}
}
}
Conversion between two-dimensional arrays and sparse arrays
Guess you like
Origin blog.csdn.net/qq_43478694/article/details/107716568
Ranking