當(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");
}
}