稀疏數(shù)組

當(dāng)一個數(shù)組中大部分元素為0,或者為同一值的數(shù)組時,我們可以用稀疏數(shù)組來保存該數(shù)組。在稀疏數(shù)組中,數(shù)組下標(biāo)為[0]的第一行元素分別代表原始數(shù)組的行列數(shù)以及中的有效值(即非零值)的個數(shù),再往下從稀疏數(shù)組第二行開始,每行的元素分別記錄了各個有效值在原始數(shù)組中所在的位置以及有效值的值。如下圖所示,例如下標(biāo)為[1]的第二行中的元素表示記錄了原始數(shù)組中array[0][3]=22,即原始數(shù)組中第一行第四個數(shù)為22。


image.png

稀疏數(shù)組的處理方法:
1.記錄數(shù)組一共有幾行幾列,有多少個不同的值
2.把具有不同值的元素的行列以及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。
3.我們把上圖的例子6行7列變成了9行3列,稀疏數(shù)組固定都是3列。

實例:


image.png

我們把一個11x11的數(shù)組轉(zhuǎn)換成稀疏數(shù)組

public static void main(String[] args) {
    //1、創(chuàng)建一個二維數(shù)組 11*11   0:沒有棋子  1:黑棋   2:白棋
    int[][] array1 = new int[11][11];
    array1[1][2] = 1;
    array1[2][3] = 2;

    int sum=0;
    for (int i = 0; i < 11; i++) {
        for (int j = 0; j <11 ; j++) {
            if (array1[i][j]!=0){
                sum++;
            }
        }
    }
    int[][] sparseArray=new int[sum+1][3];
    sparseArray[0][0]=11;
    sparseArray[0][1]=11;
    sparseArray[0][2]=sum;

    int sparseCount=1;
    for (int i = 0; i < 11; i++) {
        for (int j = 0; j <11 ; j++) {
            if (array1[i][j]!=0){
               sparseArray[sparseCount][0]=i;
               sparseArray[sparseCount][1]=j;
               sparseArray[sparseCount][2]=array1[i][j];
               sparseCount++;
            }
        }
    }
    System.out.println("輸出的稀疏數(shù)組為:");
    for (int i = 0; i < sparseArray.length; i++) {
        System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]+"\t");
    }


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容