稀疏数组
当一个数组中大部分元素是无意义数值的时候,可以用稀疏数组来保存改数组。
稀疏数组的处理方式:
- 第一行:记录数组有几行几列。有多少个有意义的值值。
- 第一行以后:把具有不同值的元素和行列以及值记录在 一个小规模的数组中,从而缩小程序的规模
- 列数恒为3
下图左边为常规数组,右边为稀疏数组
代码实现:常规数组-->稀疏数组--->常规数组
public class SparseArray {
public static void main(String[] args) {
//创建一个二维数组 11*11 0为无棋子 1为黑 2为白
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
//输出普通的数组
System.out.println("输出原数组:");
for (int[] row : array) {
for (int col : row) {
System.out.print(col + "\t");
}
System.out.print('\n');
}
//-->稀疏数组
int count = 0; //记录有意义的值的几个,以确定稀疏数组的行数。
for(int i = 0 ;i < array.length;i++){
for(int j = 0;j < array[0].length;j++){
if(array[i][j] != 0){
count++;
}
}
}
//创建稀疏数组
int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = array.length;
sparseArray[0][1] = array[0].length;
sparseArray[0][2] = count;
//给稀疏数组赋值
int num = 0;//第几个有意义的数
for(int i = 0 ;i < array.length;i++){
for(int j = 0;j < array[0].length;j++){
if(array[i][j] != 0){
num++;
sparseArray[num][0] = i;
sparseArray[num][1] = j;
sparseArray[num][2] = array[i][j];
}
}
}
System.out.println("------------------------------------------");
//输出稀疏数组
for (int[] row : sparseArray) {
for (int col : row) {
System.out.print(col + "\t");
}
System.out.print('\n');
}
//稀疏数组-->常规数组
int [][] arr = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i <= sparseArray[0][2];i++){
arr[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
System.out.println("------------------------------------------");
//输出稀疏数组
for (int[] row : arr) {
for (int col : row) {
System.out.print(col + "\t");
}
System.out.print('\n');
}
}
}