二维数组转稀疏数组
分析:
1.我们先把二维数组遍历一遍,统计有效数据的总个数sum
2.根据sum可以创建一个 sum*3的数组 newArr[ ] [ ]
3.将二维数组的有效值保存在newArr数组中
newArr数组是3列分别为 row col val 第一行 为 原先矩阵的行数和列数,val表示是有几个有效值。
从第二行开始记录原先矩阵中具体有效值的位置和数值大小。
实现代码如下:
public class SparseArray {
public static void main(String[] args){
//创建一个原始的二维数组11*11
int Arr[][]=new int[11][11];
Arr[1][2]=1;
Arr[2][3]=2;
System.out.println("原始二维数组:");
for(int[] row:Arr){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//开始遍历数组,记录有效值个数
int sum=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(Arr[i][j]!=0){
sum+=1;
}
}
}
//创建一个新的数组保存原先数组的有效值及其位置
int newArr[][]=new int[sum+1][3];
newArr[0][0]=11;
newArr[0][1]=11;
newArr[0][2]=sum;
//将原先数组的有效值保存在新数组中
int k=1;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(Arr[i][j]!=0){
newArr[k][0]=i;
newArr[k][1]=j;
newArr[k][2]=Arr[i][j];
k++;
}
}
}
System.out.println("转换后的稀疏数组:");
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.printf("%d\t",newArr[i][j]);
}
System.out.println();
}
}
}