當一個數組大部分元素爲0,或者爲同一值的數組時,能夠使用稀疏數組表示;java
稀疏數組處理方法:小程序
1)記錄數據有幾行幾列,有多少個不一樣的值;數組
2)把具備不一樣值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模;spa
3.原始數據轉化爲稀疏數組code
方法: 1)稀疏數組老是3列,第一行老是固定的,由原數組的行列數以及原數組中的非0個數組成;blog
因此首先遍歷獲得原數組中的非0個數sum以及行列數,建立稀疏數組new int[sum+1][3]get
2) 遍歷原數組將有效值存入稀疏數組中class
方法: 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; } }