稀释数组
作者:互联网
稀释数组
目的:
- 将一个只包含某种单一元素的二维数组稀释为一个较小的二维数组,减少占用空间
分析及源码
//模拟稀疏数组
public static void main(String[] args) {
//1.创建原始二维数组
int[][] twoArr1 = new int[11][11];
//注意:二维数组在创建后如果不赋值,则默认全部是0
//给二维数组中的部分元素赋值
twoArr1[1][2] = 1;
twoArr1[2][3] = 2;
twoArr1[3][4] = 1;
twoArr1[4][5] = 2;
//2.遍历查看创建的二维数组
System.out.println("原始二维数组~~");
//双重增强for遍历
for (int[] ints : twoArr1) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
//3.创建稀疏数组,
//3.1稀疏数组第一行存储二维数组的大小
//3.2 从第二行开始存储二维数组中非零元素的行数和列数及其元素值
//3.3 所以稀疏数组的行为原二维数组的非零元素个数+1,列为3
//4.遍历原二维数组拿到非零元素个数
//定义count保存非零元素个数
int count = 0;
for (int i = 0; i < twoArr1.length; i++) {
for (int j = 0; j < twoArr1[i].length; j++) {
if (twoArr1[i][j] != 0) {
count++;
}
}
}
//查看非零元素的个数
//System.out.println("count= " + count);
//5.创建稀疏数组
int[][] sparseArr = new int[count + 1][3];
//6.稀疏数组赋值(遍历原始二维数组)
//第一行的元素是确定的,可以直接输入
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = count;
//因为稀释数组从第二行开始保存原始数组中非零元素的行列及值,因此定义num为稀释数组的行号
int num = 0;
for (int i = 0; i < twoArr1.length; i++) {
for (int j = 0; j < twoArr1[i].length; j++) {
if (twoArr1[i][j] != 0) {
num++;
//保存原始二维数组中不为零的元素的行列和值到稀释数组
sparseArr[num][0] = i;
sparseArr[num][1] = j;
sparseArr[num][2] = twoArr1[i][j];
}
}
}
//7.打印稀疏数组
System.out.println("稀疏数组~~");
//双重for遍历
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();
}
//8.稀释数组再转为二维数组
//8.1 稀释数组的第一行保存了二维数组的大小信息,因此先读取二维数组的行列信息并创建二维数组
int[][] twoArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
//8.2 遍历稀释数组给二维数组赋值
for (int i = 1; i < sparseArr.length; i++) {
twoArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//打印二维数组
System.out.println("还原后的二维数组~~");
for (int[] ints : twoArr2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
//将稀释后的二维数组保存到文件中
File file = new File("src\\algorithm\\sparse.txt");
try {
FileOutputStream fos = new FileOutputStream(file);
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[i].length; j++) {
fos.write(sparseArr[i][j]);
}
}
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
标签:稀释,++,int,二维,数组,twoArr1,sparseArr 来源: https://www.cnblogs.com/mx-info/p/14723425.html