当一个数组大部分元素为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; } }