稀疏数组
- 稀疏数组是一种数据结构
- 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的行列及值记录在一个小规模的数组中,从而缩小程序的规模
![稀疏数组]()
//1、创建一个二维数组
//2、转化成稀疏数组
//3、稀疏数组还原成原来的值
public class Main {
public static void main(String[] args) {
// 稀疏数组
// 创建一个二维数组
int[][] numsArrays = new int[11][11]; // 11*11
numsArrays[1][2] = 1;
numsArrays[2][3] = 2;
numsArrays[3][4] = 2;
printArrays(numsArrays);
System.out.println("==============================");
System.out.println("转换成稀疏数组");
System.out.println("==============================");
// 转化成稀疏数组
// 稀疏数组由三列组成,有几个数据就有几行
int len = 0; // 计算有几个数据
for (int[] nums : numsArrays) {
for (int num : nums) {
if (num != 0) {
len++;// 非零+1
}
}
}
int count = 0;
// 生成一个二维数组
int[][] sparseArrays = new int[len+1][3];
// 稀疏数组表头
sparseArrays[count][0] = 11;
sparseArrays[count][1] = 11;
sparseArrays[count][2] = len;
// 遍历数组,将值存入稀疏数组
for (int i = 0; i < numsArrays.length; i++) {
for (int j = 0; j < numsArrays[i].length; j++) {
if (numsArrays[i][j] != 0) {
count++;
sparseArrays[count][0] = i;
sparseArrays[count][1] = j;
sparseArrays[count][2] = numsArrays[i][j];
}
}
}
printArrays(sparseArrays);
// 还原值
System.out.println("==============================");
System.out.println("还原值");
System.out.println("==============================");
int[][] arrayOrigin = new int[sparseArrays[0][0]][sparseArrays[0][1]];
for (int i = 1; i < sparseArrays.length; i++) {
// 从第一行开始
arrayOrigin[sparseArrays[i][0]][sparseArrays[i][1]] = sparseArrays[i][2];
}
printArrays(arrayOrigin);
}
public static void printArrays(int[][] Arrays){
/**
* 打印数组方法
*/
for (int[] nums : Arrays) {
for (int j = 0; j < nums.length; j++) {
System.out.print(nums[j] + "\t");
}
System.out.println();
}
}
}