二维数组转稀疏数组思路:
* 1、创建一个二维数组,遍历获取有效数据的个数sum
* 2、根据sum创建稀疏数组
int[sum+1][3]
并对于第一行属性处赋值
* 3、遍历二维数组将有效数据存入稀疏数组
稀疏数组转二维数组思路:
- 1、通过稀疏数组获取二维数组的行列值
- 2、读取稀疏数组第二行及第二行之后的数据赋给二维数组
public class 稀疏数组 {
public static void main(String[] args) {
//创建一个二维数组
int[][] Arr1 = new int[11][11];
Arr1[1][2]=1;
Arr1[2][3]=2;
Arr1[4][5]=2;
//遍历获取有效数据的个数sum
int sum=0;
//遍历行数i与列数i1
for (int i = 0; i < Arr1.length; i++) {
for (int i1 = 0; i1 < Arr1[i].length; i1++) {
if (Arr1[i][i1]!=0){
sum++;
}
}
}
//根据sum创建稀疏数组
int[][] sparseArr = new int[sum+1][3];
//稀疏数组第0行赋值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//遍历二维数组,非0值存入稀疏数组
int count=0;
for (int i = 0; i < Arr1.length; i++) {
for (int i1 = 0; i1 < Arr1[i].length; i1++) {
if (Arr1[i][i1]!=0){
count++;
sparseArr[count][0]=i;//第一列存非0值所在行数
sparseArr[count][1]=i1;//第二列存非0值所在列数
sparseArr[count][2]=Arr1[i][i1];//第三列存非0值
}
}
}
//查看稀疏数组
for (int i = 0; i < sparseArr.length; i++) {
for (int i1 = 0; i1 < 3; i1++) {
System.out.print(sparseArr[i][i1]+" ");
}
System.out.println();
}
//稀疏数组转二维数组 根据稀疏数组第一行属性值创建一个二维数组
int[][] Arr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
//遍历稀疏数组 将有效值赋给二维数组
for (int i = 1; i < sparseArr.length; i++) {
Arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
//遍历二维数组
System.out.println("新的二维数组: ");
for (int i = 0; i < Arr2.length; i++) {
for (int j = 0; j < Arr2[i].length; j++) {
System.out.print(Arr2[i][j]+" ");
}
System.out.println();
}
}
}
输出结果:
稀疏数组:
11 11 3
1 2 1
2 3 2
4 5 2
转换的二维数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0