Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解
基本介紹
當一個數(shù)組中大部分元素為0,或者為同一個值的數(shù)組時,可以使用稀疏數(shù)組來保存該數(shù)組。
稀疏數(shù)組的處理方法是:
①記錄數(shù)組一共有幾行幾列,有多少個不同的值(0除外)。
②把具有不同值的元素的行列及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。
二維數(shù)組轉(zhuǎn)稀疏數(shù)組:
①遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)的個數(shù) sum(除0外不同值)
②根據(jù) sum 創(chuàng)建稀疏數(shù)組 sparseArr int[sum+1][3]
③將二維數(shù)組的有效數(shù)據(jù)數(shù)據(jù)存入到稀疏數(shù)組
(稀疏數(shù)組的第一行,三列分別記錄二維數(shù)組的行、列、有效數(shù)據(jù)個數(shù))
(后面的行記錄有效數(shù)據(jù)元素,三列分別記錄行、列、有效數(shù)據(jù)元素值)
稀疏數(shù)組轉(zhuǎn)二維數(shù)組:
①先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
②再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可
應(yīng)用實例
使用稀疏數(shù)組,來保留二維數(shù)組(棋盤、地圖等等),把稀疏數(shù)組存盤,并且可以重新恢復為原來的二維數(shù)組數(shù)。
如下為一個棋盤通過二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組加以存盤和復盤:
1、創(chuàng)建原始二維數(shù)組并輸出
//創(chuàng)建一個原始的二維數(shù)組11*11,0表示無子,1表示黑子,2表示藍子 int[][] chessArr1 = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; //輸出原始二維數(shù)組 for (int[] row : chessArr1){ for (int data : row){ System.out.print(data + "\t"); } System.out.println(); }
2、將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組
//將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組 //先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個數(shù) int sum = 0; for (int i = 0; i < chessArr1.length; i++) { for (int j = 0; j < chessArr1[i].length; j++) { if (chessArr1[i][j] != 0) sum++; } } //創(chuàng)建對應(yīng)的稀疏數(shù)組并賦值 int[][] sparseArr = new int[sum + 1][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = sum; int count = 0; //用于記錄賦值到第幾行 for (int i = 0; i < chessArr1.length; i++) { for (int j = 0; j < chessArr1[i].length; j++) { if (chessArr1[i][j] != 0) { count++; sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = chessArr1[i][j]; } } } //輸出稀疏數(shù)組 for (int[] row : sparseArr){ for (int data : row){ System.out.print(data + "\t"); } System.out.println(); }
3、將稀疏數(shù)組轉(zhuǎn)回二維數(shù)組
//將稀疏數(shù)組轉(zhuǎn)換為二維數(shù)組 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]; } //輸出 for (int[] row : chessArr2){ for (int data : row){ System.out.print(data + "\t"); } System.out.println(); }
到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)Java 稀疏數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實戰(zhàn)項目之谷歌瀏覽器全屏效果實現(xiàn)
這篇文章主要介紹了通過 Java SpringBoot來實現(xiàn)谷歌瀏覽器的全屏效果,希望頁面展示時可以實現(xiàn)全屏效果以提高用戶體驗。感興趣的小伙伴跟著小編往下看吧2021-09-09springboot+thymeleaf+layui的實現(xiàn)示例
本文主要介紹了springboot+thymeleaf+layui的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-12-12SpringBoot項目啟動時增加自定義Banner的簡單方法
最近看到springboot可以自定義啟動時的banner,然后自己試了一下,下面這篇文章主要給大家介紹了SpringBoot項目啟動時增加自定義Banner的簡單方法,需要的朋友可以參考下2022-01-01