二維陣列轉換為稀疏陣列

2021-10-19 02:56:49 字數 3694 閱讀 4294

二維陣列轉換為稀疏陣列

* 二維陣列轉換稀疏陣列的思路:

* 1.遍歷原始的二維陣列,得到有效資料的個數sum(sum有多少個,稀疏陣列就有sum+1行)

* 2.根據sum的個數建立稀疏陣列sparsearray int[sum + 1][3](列為固定值,行不確定)

* 3.將二維陣列的有效資料放入稀疏陣列中

* 0 0 0 1 0

* 2 0 0 0 3

* 0 5 0 0 0

* 0 0 6 0 0

* */

//建立乙個原始的4行5列二維陣列

int[

] chessarray =

newint[4

][5]

; chessarray[0]

[3]=

1;chessarray[1]

[0]=

2;//chessarray[1][4] = 3;最後結果只有效值有5個,但是結果只輸出四個這個3無法輸出

chessarray[2]

[1]=

5;chessarray[3]

[2]=

6;//遍歷原始的二維陣列,並記錄值有幾個

for(

int[

] row : chessarray)

system.out.

println()

;}

//計算有效值有幾個

//如果sum = 0 則會從0開始算結果為4,但是個數卻還是有5個,所以這裡就從1開始計數

int sum =0;

for(

int i =

0; i < chessarray.length; i++)}

} system.out.

println

("有效值的個數為:"

+ sum)

;

//將有效值放入稀疏陣列中

//建立稀疏陣列

int[

] sparsearray =

newint

[sum][3

];/** * 向稀疏陣列中新增固定資料(陣列從0開始計算)

* @auther [0][0] = 4 表示稀疏陣列第一列為行數,行數為4

* @auther [0][1] = 5 表示稀疏陣列第二列為列數,列數為5

* @auther [0][2] = sum 表示稀疏陣列第三列為value,值為sum

* */

sparsearray[0]

[0]=

4;sparsearray[0]

[1]=

5;sparsearray[0]

[2]= sum;

/** * @auther index 陣列下標

* */

int index =0;

for(

int i =

0; i < chessarray.length; i++)}

}

//輸出稀疏陣列

for(

int i =

0; i < sparsearray.length; i++

))

最後結果

這裡存在乙個問題,,把初始陣列定義為乙個一般陣列時「2 0 0 0 0 3」 這一行中最後這3始終無法識別,有效值依然為5,但是稀疏陣列中這3確實是沒有,整體思路很清楚唯一就是這個小點無法解決,看了很多篇**大家的都是差不多,通過修改**重新測試後才發現稀疏陣列只能將初始的二維陣列定義為矩陣!!!

所以修改後的**如下:

/**

* 二維陣列轉換稀疏陣列的思路:

* 1.遍歷原始的二維陣列,得到有效資料的個數sum(sum有多少個,稀疏陣列就有sum+1行)

* 2.根據sum的個數建立稀疏陣列sparsearray int[sum + 1][3](列為固定值,行不確定)

* 3.將二維陣列的有效資料放入稀疏陣列中

* 0 0 0 1

* 2 0 0 3

* 0 5 0 0

* 0 0 6 0

* */

//建立乙個原始的4行4列二維陣列

int[

] chessarray =

newint[4

][4]

; chessarray[0]

[3]=

1;chessarray[1]

[0]=

2;chessarray[1]

[3]=

3;chessarray[2]

[1]=

5;chessarray[3]

[2]=

6;//遍歷原始的二維陣列,並記錄值有幾個

for(

int[

] row : chessarray)

system.out.

println()

;}system.out.

println()

;

int sum =0;

for(

int i =

0; i < chessarray.length; i++)}

} system.out.

println

("有效值的個數為:"

+ sum)

;

//將有效值放入稀疏陣列中

//建立稀疏陣列

int[

] sparsearray =

newint

[sum +1]

[3];

/** * 向稀疏陣列中新增固定資料(陣列從0開始計算)

* @auther [0][0] = 4 表示稀疏陣列第一列為行數,行數為4

* @auther [0][1] = 4 表示稀疏陣列第二列為列數,列數為4

* @auther [0][2] = sum 表示稀疏陣列第三列為value,值為sum

* */

sparsearray[0]

[0]=

4;sparsearray[0]

[1]=

4;sparsearray[0]

[2]= sum;

/**

* @auther index 陣列下標

* */

int index =0;

for(

int i =

0; i < chessarray.length; i++)}

}//輸出稀疏陣列

for(

int i =

0; i < sparsearray.length; i++

)

一維陣列轉換為二維陣列

一維陣列 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 二維陣列 1,2,3,4,5 00,01,02,03,04 6,7,8,9,10 10,11,12,13,14 11,12,13,14,15 20,21,22,23,24 16,17,18...

稀疏陣列與二維陣列的轉換

稀疏陣列的使用場景 當乙個陣列中大部分元素為0,或者為同乙個值的時候,可以使用稀疏陣列來儲存該陣列。比如這樣乙個陣列,裡面除了1和2之外其餘全為0。比如下面這張圖 左邊二維陣列為6行7列,其中有8個非零的值,所以將 6,7,8 存在第0行 後面開始記錄原二維陣列有效資料的位置,比如有效資料22,其位...

稀疏陣列(與二維陣列互相轉換)

二維陣列的省記憶體的儲存方法,一般是n行3列,三列分別為行,列,值。二維陣列轉稀疏陣列 1.遍歷整個二維陣列,檢視有多少個有效數字 2.根據有效數字的個數,建立稀疏陣列 3.遍歷二維陣列,將有效的數字放入稀疏陣列中稀疏陣列轉二維陣列 1.根據稀疏陣列第一行建立空二維陣列 2.讀取稀疏陣列後幾行資料,...