稀疏數組

稀疏數組

1.概念

當一個數組大部分元素爲0,或者爲同一值的數組時,能夠使用稀疏數組表示;java

稀疏數組處理方法:小程序

1)記錄數據有幾行幾列,有多少個不一樣的值;數組

2)把具備不一樣值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模;spa

2.稀疏數組的舉例

3.原始數據轉化爲稀疏數組code

方法: 1)稀疏數組老是3列,第一行老是固定的,由原數組的行列數以及原數組中的非0個數組成;blog

因此首先遍歷獲得原數組中的非0個數sum以及行列數,建立稀疏數組new int[sum+1][3]get

​ 2) 遍歷原數組將有效值存入稀疏數組中class

4.稀疏數組還原原數組

方法: 1) 根據稀疏數組第一行的前兩個數值建立出原數組;循環

​ 2)遍歷稀疏數組將其餘行的值存入原數組中;遍歷

public class SparseArray {

    public static void main(String[] args) {

        int startArray[][] = new int[11][11];
        startArray[1][2] = 3;
        startArray[2][4] = 6;
        // 原數組轉稀疏數組
        int sparse[][] = startToSparse(startArray);
        for (int[] ints : sparse) {
            for (int anInt : ints) {
                System.out.print(anInt + " ");
            }
            System.out.println();
        }
        System.out.println("------------------------");
        // 稀疏數組轉爲原數組
        int[][] ints1 = SparseToStartArray(sparse);
        for (int[] ints : ints1) {
            for (int anInt : ints) {
                System.out.print(anInt + " ");
            }
            System.out.println();
        }
    }


    /**
     * 原數組轉稀疏數組
     *     row  col  val
     *  0  11   11    2     // 有效數組第一列行表明的分別爲:原數組行、列、有效數字個數
     *  1  1     2    3     // 每一個有效數值在原數組中的位置以及值
     *  2  2     4    6
     */
    private static int[][] startToSparse(int[][] startArray) {
        // 獲得原數組中的有效數值的個數
       int sum = getSum(startArray);
        // 建立稀疏數組
        int row = sum + 1; //行
        int col = 3;
        int sparse[][] = new int[row][col];
        sparse[0][0] = startArray.length;
        sparse[0][1] = startArray[0].length;
        sparse[0][2] = sum;
        // 遍歷原數組將原數組中的有效值賦值到稀疏數組
        int count = 0;
        for (int i=0;i<startArray.length;i++) {
             for (int j=0; j<startArray[0].length; j++) {
                 if (startArray[i][j] !=0) {
                     count++;
                     sparse[count][0] = i;
                     sparse[count][1] = j;
                     sparse[count][2] = startArray[i][j];
                 }
             }
         }

        return sparse;
    }


    public static int getSum(int[][] startArray) {
        int sum =0;
        for (int i=0; i<startArray.length; i++) {
            for (int j = 0; j< startArray[0].length; j++) {
                if (startArray[i][j] != 0) {
                    sum++;
                }
            }
        }
        return sum;
    }


    /**
     * 稀疏數組轉化原數組
     * 根據稀疏數組第一行的前兩個數值建立原數組
     * 循環遍歷稀疏數組後幾行,賦值給原數組
     */

    public static int[][] SparseToStartArray(int[][] sparseArray) {
        // 建立原數組
        int row = sparseArray[0][0];
        int col = sparseArray[0][1];
        int[][] startArray = new int [row][col];

        // 遍歷稀疏數組
        for (int i=1; i<sparseArray.length;i++) {
            for (int j=0; j<3; j++) {
                int startRow = sparseArray[i][0];
                int startCol = sparseArray[i][1];
                startArray[startRow][startCol] = sparseArray[i][2];
            }
        }
        return startArray;
    }
}
相關文章
相關標籤/搜索