稀疏数组的计算方法:
当一个二维数组中大部分为零,或为相同的数,可以使用稀疏数组来记录。
定义一个二维数组为:
稀疏数组第一行为几行,几列,几个不为零的数
下面的每一行,为没一个不为零的数的位置,几行几列
稀疏数组代码实现
// 稀疏数组 public class SpartsArray { public static void main(String[] args) { // 创建二维数组11*11 // 0表示没有棋子 1表示黑子 2表示篮子 int chessArr1[][] = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; for (int row[] : chessArr1) { for (int item : row) { System.out.printf("%d\t", item); } System.out.println(); // 打印一行换行 } // 先遍历二维数组,获取棋子个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArr1[i][j] != 0) { sum++; } } } System.out.println("sum=" + sum); int num = 1; // 定义稀疏数组并赋值 int sparceArray[][] = new int[sum + 1][3]; sparceArray[0][0] = 11; sparceArray[0][1] = 11; sparceArray[0][2] = sum; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArr1[i][j] != 0) { sparceArray[num][0] = i; sparceArray[num][1] = j; sparceArray[num][2] = chessArr1[i][j]; num = num + 1; } } } // 输出稀疏数组 System.out.println(); System.out.println("稀疏数组为:"); for (int i = 0; i < sparceArray.length; i++) { System.out.printf("%d\t%d\t%d\t\n", sparceArray[i][0], sparceArray[i][1], sparceArray[i][2]); } // 稀疏数组转换为二维数组 int chessArr2[][] = new int[sparceArray[0][0]][sparceArray[0][1]]; for (int i = 1; i < sparceArray.length; i++) { chessArr2[sparceArray[i][0]][sparceArray[i][1]] = sparceArray[i][2]; } System.out.println(); System.out.println("转换为二维数组为:"); for (int row[] : chessArr2) { for (int item : row) { System.out.printf("%d\t", item); } System.out.println(); // 打印一行换行 } } }