1. 程式人生 > 其它 >【Java資料結構與演算法】二維陣列與稀疏陣列

【Java資料結構與演算法】二維陣列與稀疏陣列

二維陣列與稀疏陣列的互換:

圖片在這裡插入圖片描述

圖片來源於 尚矽谷Java資料結構與java演算法

/*
	五子棋棋盤	大小:11*11
	0:沒有棋子  1:黑子    2:白子
*/

public class SparseArray {
    public static void main(String[] args) {
        //  建立 二維陣列 11* 11
        int[][] array = new int[11][11];
		//	給對應位置賦值
        array[1][2] = 1;
        array[2][3] = 2;
        //	array[3][4] = 2;	//測試加一個數據
// 輸出原始二維陣列 System.out.println("=====二維陣列======="); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { System.out.printf("%d\t", array[i][j]); } System.out.println
(); } // 1. 二維陣列 -> 稀疏陣列 /* 格式:(序號) row col val 大小: sum(非0資料) * 3 步驟: ①.求出sum (遍歷得出非0資料個數) ②.獲取非0資料 得到 row(i) col(j) val(value) (遍歷獲取) */ // ①.求出sum (遍歷得出非0資料個數) int sum = 0; for (int i =
0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array[i][j] == 0) { } else sum++; } } System.out.println("============"); System.out.println("非0資料個數:" + sum); // 建立 稀疏陣列 int[][] sparseArray = new int[sum + 1][3]; // System.out.println(array.length); // 二維陣列的行 // System.out.println(array[0].length); // 二維陣列的列 // 根據二維陣列大小以及sum 來 對稀疏陣列第0行進行賦值 sparseArray[0][0] = 11; // "二維陣列總row:array.length = 11"; sparseArray[0][1] = 11; // "二維陣列總col:array[0].length = 11"; sparseArray[0][2] = sum; // 非0資料個數 // 將對應值賦值到稀疏陣列中 int counter = 1; // 從第1行開始賦值 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array[i][j] == 0) { } else { sparseArray[counter][0] = i; // "當前資料在二維陣列中的行數" 就是 i; sparseArray[counter][1] = j; // "當前資料在二維陣列中的列數" 就是 j; sparseArray[counter][2] = array[i][j]; counter++; } } } // 輸出稀疏陣列 System.out.println("=====稀疏陣列======="); for (int i = 0; i < sparseArray.length; i++) { for (int j = 0; j < sparseArray[0].length; j++) { System.out.printf("%d\t", sparseArray[i][j]); } System.out.println(); } // 2. 稀疏陣列 -> 二維陣列 // 建立一個二維陣列 int[][] array2 = new int [sparseArray[0][0]][sparseArray[0][1]]; // 將稀疏陣列中的資料賦值至二維陣列中的對應位置 for (int i = 1; i < sparseArray.length; i++) { array2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } // 輸出二維陣列 System.out.println("=====二維陣列======="); for (int i = 0; i < array2.length; i++) { for (int j = 0; j < array2[0].length; j++) { System.out.printf("%d\t", array2[i][j]); } System.out.println(); } } }

java獲取二維陣列的 行數 和 列數

int[][] array = new int[3][4];
System.out.println("二維陣列的行數:"+array.length);
System.out.println("二維陣列的列數:"+array[0].length);

思路整理:

二維陣列 -> 稀疏陣列(?* 3)

  • 求得二維陣列的 行數 和 列數 (array.length array[0].length )

    • 確定了稀疏陣列第一行的 row col
  • 求得二維陣列的 非0資料個數sum (遍歷陣列)

    • 確定了稀疏陣列第一行的 val = sum
    • 確定了稀疏陣列的 行數 = sum + 1
  • 求得二維陣列非0資料 對應的 row 和 col 以及 value (行:i ,列:j )

    • 賦值給稀疏陣列

稀疏陣列 -> 二維陣列

  • 根據稀疏陣列第一行
    • 得到 二維陣列的大小(row*col)
  • 根據稀疏陣列後續行
    • 賦值到 二維陣列對應位置