原数组与稀疏数组转换
思路
数组转稀疏数组
1、遍历 原始的二维数组,得到非0数据的个数sum
2、根据sum创建稀疏数组 sparseArray[sum+1][3]
3、将二维数组的邮箱数据保存到稀疏数组中
数组转稀疏数组
1、读取稀疏数组的第一行,得到行和列,创建原始的二维数组
2、在读取细数数组后几行的数组,并且赋值给二维数组即可 *i从1开始,不是0开始*
public class Demo {
public static void main(String[] args) {
//测试数据
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2 ;
System.out.println("原数组如下");
printArray(array);
//转换成稀疏数组
int[][] SparseArray = exchangeToSparseArray(array);
System.out.println("得到的稀疏数组如下");
printArray(SparseArray);
int[][] toArray = exchangeToArray(SparseArray);
System.out.println("得到的原数组如下");
printArray(toArray);
}
//转换成稀疏数组
public static int[][] exchangeToSparseArray(int[][] array){
//得到数组的行和列
int row = array.length;
int col = array[0].length;
//寻找出非0的个数
int sum = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (array[i][j] != 0) sum++;
}
}
//开辟稀疏数组
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = row;
sparseArray[0][1] = col;
sparseArray[0][2] = sum;
//计数值控制稀疏数组
int count = 0;
//遍历非0元素
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (array[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = array[i][j];
}
}
}
return sparseArray;
}
//转换回原数组
public static int[][] exchangeToArray(int[][] array){
int row = array[0][0];
int col = array[0][1];
int[][] newArray = new int[row][col];
//从1开始,0行保存了原数组的行和列
for (int i = 1; i < array.length; i++) {
newArray[array[i][0]][array[i][1]] = array[i][2];
}
return newArray;
}
//打印数组
public static void printArray(int[][] array){
for(int[] row:array){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}