背景
二维数组如果数据很少的情况下,有很多默认值为0的无意义的数据,因此可转为稀疏数组
转换思路
原数组示例:
转换后示例:
思路描述:
1、 稀疏数组列固定为3,其中第一行第一列代表原始数组一共有多少行,第一行第二列代表原始数组有多少列,第一行第三列代表原始数组一共有多少个值需要转化;
2、 稀疏数组从第二行开始,第一列代表原始数组第几行,第二列代表原始数组第几列,第三列代表具体的值;
3、 稀疏数组的行数为:原始数组有效值+1;
代码示例
public class SparseArray {
public static void main(String[] args) {
//原始数组
int chessArr1[][] = new int[5][5];
chessArr1[1][2] = 11;
chessArr1[3][3] = 22;
//遍历多少个非0个数
int sum = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (chessArr1[i][j] != 0) {
sum++;
}
}
}
//稀疏数组
int sparseArr[][] = new int[sum + 1][3];
sparseArr[0][0] = 5;//原始数组有5行
sparseArr[0][1] = 5;//原始数组有5列
sparseArr[0][2] = sum;//原始数组有sum个有效值
// 遍历二维数组,将非0的值存放到 sparseArr中
int count = 0; //count 用于记录是第几个非0数据
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (chessArr1[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//稀疏数组还原二维数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
printArr(chessArr2);//打印还原后的数组
}
private static void printArr(int[][] chessArr1) {
for (int[] row : chessArr1) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: