稀疏sparsearray数组
稀疏数组应用场景:
当数组中记录了很多没有意义的数据—>稀疏数组
当数组中大部分数据为0或相同的值时,可以用稀疏数组来保存
处理方法:
1.记录数组的行列,多少个不同的值
2.把不同值的行列及值记录在一个小规模数组里
二维–>稀疏思路:
1.遍历原始的二维数组,得到有效数据个数sum
2.根据sum创建稀疏数组sparseArr int[sum+1】[3]
3.将二维数组的有效数据存入稀疏数组
//代码实现
/*
* 实现数组的压缩和解压
*/
public class ArrayToSparseArray {
public static void main(String[] args) {
//创建原始二维数组,11*11
//0无棋子,1黑棋,2白棋
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
//把二维数组输出
System.out.println("二维数组为:");
for(int i=0;i<11;i++) {
for(int j=0;j<11;j++) {
System.out.print("\t"+chessArr1[i][j]);
if(j==10) {
System.out.println();
}
}
}
//先遍历二维数组获取有效数据的个数
int sum = 0;
for(int i = 0;i<chessArr1.length;i++) {
for(int j = 0;j<chessArr1.length;j++) {
if(chessArr1[i][j]!=0) {
sum+=1;
}
}
}
//创建对应的稀疏数组
int[][] sparseArr1 = new int[sum+1][3];
//给稀疏数组赋值
sparseArr1[0][0] = 11;
sparseArr1[0][1] = 11;
sparseArr1[0][2] = sum;
//遍历二维数组,将有效数据存入稀疏数组中
int count = 0;//用于记录是第几个有效数据
for(int i = 0;i<chessArr1.length;i++) {
for(int j = 0;j<chessArr1.length;j++) {
if(chessArr1[i][j]!=0) {
count++;
sparseArr1[count][0] = i;
sparseArr1[count][1] = j;
sparseArr1[count][2] = chessArr1[i][j];
}
}
}
//把稀疏数组输出
System.out.println();
System.out.println("稀疏数组为:");
for(int i = 0;i<sparseArr1.length;i++) {
for(int j = 0;j<sparseArr1.length;j++) {
System.out.print("\t"+sparseArr1[i][j]);
if(j==sparseArr1.length-1) {
System.out.println();
}
}
}
}
}
稀疏思路–>二维:
1.先读取稀疏数组第一行,根据第一行创建原始二维数组
2.读取稀疏数组后几行,并赋值给原始二维数组
//代码实现
public class SparseArrayToArray {
public static void main(String[] args) {
//创建一个稀疏队列
int[][] sparseArr2 = new int[3][3];
sparseArr2[0][0] = 11;
sparseArr2[0][1] = 11;
sparseArr2[0][2] = 2;
sparseArr2[1][0] = 3;
sparseArr2[1][1] = 2;
sparseArr2[1][2] = 1;
sparseArr2[2][0] = 4;
sparseArr2[2][1] = 5;
sparseArr2[2][2] = 2;
//1.先读取稀疏数组第一行,根据第一行创建原始二维数组
int row = sparseArr2[0][0];
int col = sparseArr2[0][1];
int[][] chessArr2 = new int[row][col];
//2.读取后几行数据,赋值给原始的二维数组
for(int i=1;i<row;i++) {
if(i<3) {
chessArr2[sparseArr2[i][0]][sparseArr2[i][1]]=sparseArr2[i][2];
}else {
break;
}
}
//输出恢复后的二维数组
System.out.println("恢复后的二维数组:");
for(int i=0;i<row;i++) {
for(int j=0;j<row;j++) {
System.out.print(/*"\t"+*/chessArr2[i][j]);
}
System.out.println();
}
}
}