數據結構與算法——Java實現二維數組與稀疏數組相互轉化
在實際工作中,爲了節約存儲空間,如果數組元素有較多相同元素時,我們可以通過將其轉化爲稀疏數組進行存儲。
以下是一個二維數組轉稀疏數組的簡單Java代碼:
package sparsearray;
public class SparseArray {
public static void main(String[] args) {
//創建一個原始的二維數組11*11
int chessArr[][] = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[1][5] = 1;
chessArr[2][6] = 2;
//輸出原始的二維數組
System.out.println("==========原始數組==========");
for (int[] row : chessArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//將二維數組轉稀疏數組
//1. 遍歷二維數組得到非0數據的個數
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr[i][j] != 0) {
sum++;
}
}
}
//2. 創建對應的稀疏數組
int sparseArr[][] = new int[sum + 1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0; //count用於記錄是第幾個非零數據
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j];
}
}
}
System.out.println("==========稀疏數組==========");
for (int[] row : sparseArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//將稀疏數組轉二維數組
/*
*
* 1.先讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組
* 2.在讀取稀疏數組後幾行的數據,並賦值給原始的二維數組
* */
int[][] recoveryArray = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
recoveryArray[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println("==========稀疏數組恢復後的原始數組==========");
for (int[] row : recoveryArray) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}