稀疏数组
- 图片来自B站狂神说
- 定义稀疏数组时一定是3列,其行数是有效值+1
- 第0行0列是原数组的行数,0行1列是原数组的列数,0行2列是有效值个数
创建稀疏数组步骤:
- 遍历原数组,计算有效值的个数
- 声明并建立稀疏数组,其列数为有效值个数,行数为3
- 对0行0列赋值原数组行数,0行1列赋值原数组列数,0行2列赋值有效值的个数
- 再一次遍历原数组,遇到有效值则将其行数i,列数j,有效值分别赋值给稀疏数组的x行0列,1列,2列
还原稀疏数组:
- 声明并建立一个新数组,其行数为稀疏数组的0行0列的值,列数为0行1列的值
- 遍历稀疏数组,遇到有效值时,c[b[i][0]][b[i][1]] = b[i][2];
代码示例:
package array;
import java.util.Arrays;
//稀疏数组
public class ArrayDemo07 {
public static void main(String[] args) {
int[][] a = new int[11][11];
a[1][2]=1;
a[2][3]=2;
//输出原有的数组
System.out.println("输出原始的数组:" );
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("======================");
//创建一个稀疏数组的数组
int count=0; //记录非0值的个数
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){
count++;
}
}
}
int[][] b = new int[count+1][3];
b[0][0] = a.length;
b[0][1] = a[0].length;
b[0][2] = count;
int cnt=0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){
cnt++;
b[cnt][0] = i;
b[cnt][1] = j;
b[cnt][2] = a[i][j];
}
}
}
System.out.println("稀疏数组:");
for (int[] ints : b) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("=======================");
//还原稀疏数组
int[][] c = new int[b[0][0]][b[0][1]];
for(int i=1; i<b.length; i++){
c[b[i][0]][b[i][1]] = b[i][2];
}
System.out.println("还原稀疏数组:");
for (int[] ints : c) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}