基本介绍
当一个数组中大部分值为0 或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组处理方法
记录一个数组有几行几列,有多少个不同的值,把具有不同值的元素的行列及值记录在一个小规模的数组当中,从而缩小程序的规模
二维数组转稀疏数组
- 遍历原始的二维数组,得到有效数据的个数sum;
- 根据sum就可以创建稀疏数组 sparseArr int[sum+1][3];
- 将二维数组的有效数据存入到稀疏数组;
稀疏数组转二维数组的思路
- 先读取稀疏数组的第一行,根据第一行数据,创建原始的二维数组,比如上面的 chessArr2=int[11][11];
- 先读取稀疏数组后几行数据,并赋值给原始的二维数组即可
实例1:二数组与稀疏数组互相转换
public class Test01 {
public static void main(String[] args) {
//创建一个原始的二维数组11*11;
//0 表示没有棋子 1 表示黑子 2 表示白子
int chessArr[][]=new int[11][11];
chessArr[1][2]=1;
chessArr[2][4]=2;
int count=0;
for(int[] row :chessArr){
for(int rowint: row){
if(rowint!=0){
count++;
}
System.out.printf("%d\t",rowint);
}
System.out.println();
}
System.out.println("原始数组------------------------");
int spaseArr[][]=new int[count+1][3];
int rows=0;
int each=0;
spaseArr[0][0]=11;
spaseArr[0][1]=11;
spaseArr[0][2]=count;
int count2=0;
for(int[] row :chessArr){
for(int rowint: row){
if(rowint!=0){
spaseArr[count2+1][0]=rows;
spaseArr[count2+1][1]=each;
spaseArr[count2+1][2]=rowint;
count2++;
}
each++;
}
rows++;
each=0;
}
for(int[] row :spaseArr){
for(int num : row){
System.out.printf("%d\t",num);
}
System.out.println();
}
System.out.println("稀疏数组------------------------");
int[][] charArr=new int [spaseArr[0][0]][spaseArr[0][1]];
for(int i=1;i<spaseArr.length;i++){
charArr[spaseArr[i][0]][spaseArr[i][1]]=spaseArr[i][2];
}
for(int[] row :charArr){
for(int rowint: row){
if(rowint!=0){
count++;
}
System.out.printf("%d\t",rowint);
}
System.out.println();
}
System.out.println("还原数组---------------");
}
}