“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情”
稀疏数组
定义:当数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组保存该数组。
稀疏数组的处理方式是:
1)记录一个数组一共有几行几列,有多少个不同值
2) 把具有不同的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
1)二维数组转成稀疏数组
思路:1>遍历原始的二维数组,从而得到有效的数据个数记为sum
2>根据sum就可以创建一个稀疏数组sparseArr int[sum+1][3]
3>将二维数组的有效数据存入到稀疏数组里面
2)稀疏数组还原成二维数组
思路:1>先读取稀疏数组的第一行,并根据第一行得到的数据,创建原始二维数组chessArr2=int[11][11]
2>再读取稀疏数组后几行的数据,并赋给原始的二维数组即可
具体代码实现如下:
//1.先创建一个棋盘
int[][] chessArr1 = new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
chessArr1[4][3]=2;
//输出原始的二维数组
System.out.println( "原始的二维数组");
for(int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
System.out.print(chessArr1[i][j] + " " );
}
System.out.println();
}
//2.将二维数组中的数据转成稀疏数组
int sum=0; //用于统计特殊值出现的个数
for(int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if(chessArr1[i][j]!=0){
sum+=1;
}
}
}
//创建稀疏数组
int[][] sparearray = new int[sum + 1][3];
sparearray[0][0]=chessArr1.length;
sparearray[0][1]=chessArr1[0].length;
sparearray[0][2]=sum;
int count=0; //用于控制稀疏数组的前进
//将值放入创建的稀疏数组中
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].**length; j++) {
if (chessArr1[i][j]!=0){
count++;
sparearray[count][0]=i;
sparearray[count][1]=j;
sparearray[count][2]=chessArr1[i][j];
}
}
}
//输出稀疏数组
System.out.println( "转成的稀疏数组");
for(int i = 0; i < sparearray.length; i++) {
for (int j = 0; j < sparearray[i].length; j++) {
System.out.print(sparearray[i][j] + " " );
}
System.out.println();
}
//3.将稀疏数组再转成二维数组
int[][] chessarray2 = new int[sparearray[0][0]][sparearray[0][1]];
//将稀疏数组中的值赋予
for(int i = 1; i <=sparearray[0][2] ; i++) {
chessarray2[sparearray[i][0]][sparearray[i][1]]=sparearray[i][2];
}
//输出赋值后的二维数组
System.out.println( "将稀疏数组赋值后的二维数组");
for(int i = 0; i < chessarray2.length; i++) {
for (int j = 0; j < chessarray2[i].length; j++) {
System.out.print(chessarray2[i][j] + " " );
}
System.out.println();
}