有时候,我们用到的二维数组 可能会有很多的位置 是数据都是 无效的,有效的 只有几个值 ,这样就 可能 会造成 空间上的浪费 ,于是,就有了 稀疏数组 , 什么是稀疏 数组呢?
例如 二维数组是这样的:
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 3 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
那么它对应的 稀疏数组 就是 :row行 column 列 value 有效值(非0)
row column value
11 11 3
2 3 1
3 4 2
6 8 3
这样,就从一个 11X11 的二维数组 变成了 3X4 的数组了
大大节省 空间
首先 ,二维数组变成 稀疏数组的思路是这样的:
具体代码的实现:
public class one1 {
public static void main(String[] args) {
//二位数组 转变为稀疏 数组
int count= 0; //记录 非0 个数 因为 一个 非 0的 就会占 稀疏数组的一行
int array2[][]= new int [sum+1][3];//sum +1是因为 有个 记录 原来二位数组的 那个行列的
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]= sum;
for (int i = 0; i < 11 ; i++) {
for (int j = 0;j <11;j++) {
if (array[i][j] != 0)
{
count++;
array2[count][0]=i;
array2[count][1]= j ;
array2[count][2]=array[i][j];
}
}
}
System.out.println("稀疏数组如下:");
for (int i = 0;i<sum+1; i++)
{
for (int j = 0;j<3;j++)
{
System.out.print(array2[i][j]+"\t");
}
System.out.println();
}
}// main函数的右括号
}//class one 的右括号
稀疏数组转成二维数组代码如下:
public class one1 {
public static void main(String[] args) {
int array[][]=new int [11][11]; int sum=0;//sum 是 非0 个数
array[2][3] = 1;
array[3][4]= 2;
array [6][8] = 3;
for (int a []: array) { //for each
for (int b : a
) {
if (b!=0)
sum++;
System.out.print( b +" " );
}
System.out.println();
}
//二位数组 转变为稀疏 数组
int count= 0; //记录 非0 个数 因为 一个 非 0的 就会占 稀疏数组的一行
int array2[][]= new int [sum+1][3];//sum +1是因为 有个 记录 原来二位数组的 那个行列的
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]= sum;
for (int i = 0; i < 11 ; i++) {
for (int j = 0;j <11;j++) {
if (array[i][j] != 0)
{
count++;
array2[count][0]=i;
array2[count][1]= j ;
array2[count][2]=array[i][j];
}
}
}
System.out.println("稀疏数组如下:");
for (int i = 0;i<sum+1; i++)
{
for (int j = 0;j<3;j++)
{
System.out.print(array2[i][j]+"\t");
}
System.out.println();
}
int array3[][] = new int [array2[0][0]] [array2[0][1]];
for (int i = 1; i <array2.length ; i++) {
array3[array2[i][0]][array2[i][1]]=array2[i][2];
}
System.out.println("稀疏数组转成二维数组如下:");
for (int a []: array3) { //for each
for (int b : a
) {
System.out.print( b +"\t" );
}
System.out.println();
}
}// main函数的右括号
}//class one 的右括号
运行结果:
稀疏数组转成二维数组如下:
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 3 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
发布时间:2020年6月14日 16:42:53