稀疏数组
在日常写题中,我们经常用到二维数组,多数情况下的大多数值都是默认值0,这使得二维数组存在很多没有意义的数据。
为了减少存在没有意义的数据,这里使用稀疏数组。稀疏数组固定的列:行,列,值。
首先我创建一个二维数组
int sparseArray[][] = new int[11][11];
sparseArray[1][2] = 1;
sparseArray[2][3] = 2;
for (int[] sparse:sparseArray
) {
System.out.println();
for (int s:sparse
) {
System.out.printf("%d\t",s);
}
}
这里,我们让 sparseArray[1][2] = 1;sparseArray[2][3] = 2;二维数组创建后。我们来看一看稀疏数组的思路。
- 遍历原始的二维数组,得到有效的个数sum
- 根据sum就可以创建稀疏数组。
- 将二维数组的有效数据存入稀疏数组里面
1.遍历稀疏数组,得到sum
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (sparseArray[i][j] != 0)
sum++;//sum = 2
}
}
2.创建稀疏数组,并存入
int SArray[][] = new int[sum+1][3];
SArray[0][0] = 11;//行
SArray[0][1] = 11;//列
SArray[0][2] = sum;//值
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (sparseArray[i][j] != 0)
{
count++;
SArray[count][0] = i;
SArray[count][1] = j;
SArray[count][2] = sparseArray[i][j];
}
}
}
3.输出稀疏数组
for (int i = 0; i <= count; i++) {
System.out.println();
for (int j = 0; j < 3; j++) {
System.out.printf("%d\t",SArray[i][j]);
}
}
我们成功的创建了稀疏数组,那要怎么样把稀疏数组还回去呢,思路如下
- 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组。
- 在读取稀疏数组后的数据,并赋值给原始的二维数组。
1.创建原始的二位数组
int array[][] = new int[SArray[0][0]][SArray[0][1]];
2.读取稀疏数组的值
for (int i = 1; i < SArray.length; i++){
array[SArray[i][0]][SArray[i][1]] = SArray[i][2];
}
3.输出稀疏数组
for (int i = 0; i < 11; i++) {
System.out.println();
for (int j = 0; j < 11; j++) {
System.out.printf("%d\t",sparseArray[i][j]);
}
}
稀疏数组的作用在于能够减少不必要的内存消耗,提高效率。