稀疏数组
- 当一个数组中大部分的元素为0,或为同一个值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组第一行记录原数组的行数、列数、非零个数
稀疏数组代码实现
有一数组array1
代码定义:
//原始数组
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 9;
array1[3][5] = 8;
array1[4][5] = 5;
输出原始数组:
System.out.println("输出原始的数组");
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}//输出原始的数组
显然我们可以观察到,初始数组中大部分数组都为0,非零数字有:
array[1][2] 取值1
array[2][3] 取值9
array[3][5] 取值8
array[4][5] 取值5
设原数组为array1
将初始数组化为稀疏数组array2
-
先求出原数组array1中非零元素个数sum
int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array1[i][j] != 0) { sum++; } } }//非零元素个数
-
构造稀疏数组array2
int[][] array2 = new int[sum+1][3];//构造稀疏数组
-
给稀疏数组array2赋值
array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; int k = 1; for (int i = 1; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array1[i][j] != 0){ array2[k][0] = i; array2[k][1] = j; array2[k][2] = array1[i][j]; k++; } } }//给稀疏数组赋值
-
输出稀疏数组array2
System.out.println("输出稀疏数组"); for (int[] ints : array2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); }//输出稀疏数组
输出后的稀疏数组为
显然与我们观察的相同。
将稀疏数组还原回正常数组array3
还原回正常数组并输出
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];
}//还原数组
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}//输出数组
还原的数组为