1. 程式人生 > 資料庫 >SpringBoot+Redis分散式鎖:模擬搶單

SpringBoot+Redis分散式鎖:模擬搶單

稀疏陣列的應用場景:當二維陣列中有大量重複數字(以0為例)時,可以用稀疏陣列進行儲存,節省儲存空間。

稀疏陣列有三列n行

第一行用來記錄原二維陣列資訊,第一列用來記錄原二維陣列的行數,第二列用來記錄二維陣列的列數,第三列用來記錄二維陣列中非0個數。

其他行用來記錄非0元素的資訊,第一列記錄其在原二維陣列中的行標,第二列記錄列標,第三列用來記錄其具體的值。

可見稀疏陣列的行數 n=二維陣列非0元素的個數+1;

程式碼練習:

public class SparseArray {
    public static void main(String[] args) {

        //稀疏陣列棋牌案例(0表示空格,1表示黑子,2表示白子)

        
//建立一個原始棋牌 int chesArr[][]= new int[11][11]; chesArr[2][3] = 2; chesArr[5][6] = 1; int sum=0;//用來記錄非0的個數 for(int i=0;i<chesArr.length;i++){ for(int j=0;j<chesArr[i].length;j++){ if(chesArr[i][j] !=0) sum++; } }
int[][] sparseArray = new int[sum+1][3]; //第一行用來記錄原二維陣列的行和列,剩餘的行用來記錄非0資料的位置和值 sparseArray[0][0] = 11; sparseArray[0][1] = 11; sparseArray[0][2] = sum; int count=1; for(int i=0;i<chesArr.length;i++){ for(int j=0;j<chesArr[i].length;j++){
if(chesArr[i][j] !=0){ sparseArray[count][0]=i;//第一行用來記錄元二維陣列的非0資料的行 sparseArray[count][1]=j;//第二行用來記錄元二維陣列的非0資料的列 sparseArray[count][2] = chesArr[i][j];//第三行用來記錄元二維陣列的非0資料的值 count++; } } } //還原陣列 int[][] chesArr2 = new int[sparseArray[0][0]][sparseArray[0][1]]; for(int i=1;i<sparseArray.length;i++){ int row=sparseArray[i][0]; int line=sparseArray[i][1]; chesArr2[row][line]=sparseArray[i][2]; } //遍歷 for(int[] row : chesArr2){ for(int data : row){ System.out.print(" "+data); } System.out.println(); } } }