稀疏数组是将大型数组压缩后,更形象,更直观的体现,原则上还是一个数组
package sparseArray;
/**
* @author CXS
* @date 2021/4/28-21:53
**/
public class SparseArray {
public static void main(String[] args) {
// >>>>>>>>>> array transfer into sparseArr
// 1. 创建一个原始数组 11 * 11
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
// firstTravell
System.out.println("=======original array==============");
for (int[] nums : chessArr1) {
for (int data : nums) {
System.out.printf("%d\t",data);
}
System.out.println();
}
// create sparseArray, before you should know how many effective values, so you must travel
// sum stand of how many effective value
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0) {
sum++;
}
}
}
System.out.println();
System.out.println("===all have < " + sum + " > effective values;");
// next can create a sparse, row is effective values add 1, line is 3 and is fixed;
int[][] sparArr = new int[sum + 1][3];
sparArr[0][0] = 11;
sparArr[0][1] = 11;
sparArr[0][2] = sum;
// then travel originalArr and add effective values into parArr
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0) {
count++;
sparArr[count][0] = i;
sparArr[count][1] = j;
sparArr[count][2] = chessArr1[i][j];
}
}
}
// travel sparseArr
System.out.println("============= sparseArr==========");
for (int i = 0; i < sum + 1; i++) {
for (int j = 0; j < 3; j++) {
System.out.printf("%d\t", sparArr[i][j]);
}
System.out.println();
}
//>>>>>>>>>>>>>>parseArr transfer into originalArr
int[][] chessArr2 = new int[sparArr[0][0]][sparArr[0][1]];
for (int i = 1; i < sum + 1; i++) {
chessArr2[sparArr[i][0]][sparArr[i][1]] = sparArr[i][2];
}
// travel originalArr again
System.out.println("========== original arr============");
for (int i = 0;i < 11;i++) {
for (int j = 0;j <11;j++) {
System.out.printf("%d\t",chessArr2[i][j]);
}
System.out.println();
}
}
}