一、稀疏数组
1、概念:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存
2、稀疏数组的处理方法:
1)记录数组一共有几行几列,有多少不同的值
2)把具有不同值的元素的行列及值记录在一个小规模的数组(即稀疏数组)中
3、二维数组 -> 稀疏数组
1)遍历二维数组,得到有效元素的个数sum
2)根据sum创建稀疏数组,sparseArr = new int[sum+1][3]
3)将二维数组的有效数据存入稀疏数组
4、稀疏数组 -> 二维数组
1)读取稀疏数组第一行数据,创建二维数组
2)读取稀疏数组后几行数据,并赋给二维数组
二、代码实现
public class SparseArray01 {
public static void main(String[] args) {
//1、创建原始二维数组
int[][] nums = new int[11][11];
nums[1][2] = 1;
nums[2][3] = 2;
System.out.println("原始二维数组为:");
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
System.out.println("稀疏数组为:");
//二维数组 -> 稀疏数组
// 1)遍历二维数组,得到有效元素的个数sum
int sum = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
if (nums[i][j] != 0) {
sum++;
}
}
}
// 2)根据sum创建稀疏数组,sparseArr = new int[sum+1][3]
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = nums.length;
sparseArr[0][1] = nums[0].length;
sparseArr[0][2] = sum;
// 3)将二维数组的有效数据存入稀疏数组
int count = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
if(nums[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = nums[i][j];
}
}
}
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[i].length; j++) {
System.out.print(sparseArr[i][j] + "\t");
}
System.out.println();
}
// 稀疏数组 -> 二维数组
// 1)读取稀疏数组第一行数据,创建二维数组
int row = sparseArr[0][0];
int column = sparseArr[0][1];
int[][] nums2 = new int[row][column];
// 2)读取稀疏数组后几行数据,并赋给二维数组
for (int i = 1; i < sparseArr.length; i++) {
row = sparseArr[i][0];
column = sparseArr[i][1];
nums2[row][column] = sparseArr[i][2];
}
System.out.println("恢复后的二维数组:");
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
}