【Java】稀疏数组
稀疏数组
程序开发与运维发布于 今天 06:38
对于一个数组,如果大部分元素都是0或者其他相同的值,只有少数不同的值时,就可以将这个数组转换稀疏数组来存储,从而缩小数组的规模,实现类似于压缩的功能。
转换为稀疏数组
以常见的二维数组转换为稀疏数组来举例,具体步骤如下:
- 遍历源数组,获取有效数据的个数,保存到变量sum中。
- 创建稀疏数组,行数为sum+1,列数为3列,第一行的三个元素分别为源数组行数,列数以及sum,后面每一行分别为有效数据在源数组中的位置以及值。
public static int[][] arrayToSparseArray(int[][] arr){// 1.获取数组中不为0的元素的个数
int arrHeight = arr.length;
int arrLength = arr[0].length;
int sum = 0;
for (int i = 0; i < arrHeight; i++) {
for (int j = 0; j < arrLength; j++) {
if (arr[i][j] != 0) {
sum++;
}
}
}
// 2.创建稀疏数组,列数为3,行数为sum+1,第一行存储原数组长度,后面行存储原数组不为0值的位置以及值
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = arrHeight;
sparseArr[0][1] = arrLength;
sparseArr[0][2] = sum;
// 3.将原数组中不为0的值存储到稀疏数组中
int count = 1;
for (int i = 0; i < arrHeight; i++) {
for (int j = 0; j < arrLength; j++) {
if (arr[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
count++;
}
}
}
return sparseArr;
}
转换为二维数组
稀疏数组转换为二维数组步骤如下:
- 获取稀疏数组第一行数据,创建二维数组。
- 获取稀疏数组后续数据,赋值给二维数组对应元素。
public static int[][] sparseArrayToArray(int[][] sparseArr){// 1.从稀疏数组中获取第一行的值来创建数组
int arrHeight = sparseArr[0][0];
int arrLength = sparseArr[0][1];
int[][] arr = new int[arrHeight][arrLength];
// 2.从稀疏数组中获取值赋予给新创建的数组
for (int i = 1; i < sparseArr.length; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
return arr;
}
测试
public static void main(String[] args) {// 创建一个二维数组
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[4][5] = 2;
System.out.println("二维数组为:");
for (int[] row : chessArr1) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
System.out.println("转换为稀疏数组:");
int[][] parseArray = SparseArray.arrayToSparseArray(chessArr1);
for (int[] row : parseArray) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
System.out.println("转换为二维数组:");
int[][] sparseArrayToArray = SparseArray.sparseArrayToArray(parseArray);
for (int[] row : sparseArrayToArray) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
}
输出如下:
二维数组为:0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
转换为稀疏数组:
11 11 3
1 2 1
2 3 2
4 5 2
转换为二维数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
欢迎关注我的公众号,一起学习技术。
java数据结构
阅读 30发布于 今天 06:38
本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
程序开发与运维
1 声望
0 粉丝
程序开发与运维
1 声望
0 粉丝
宣传栏
目录
对于一个数组,如果大部分元素都是0或者其他相同的值,只有少数不同的值时,就可以将这个数组转换稀疏数组来存储,从而缩小数组的规模,实现类似于压缩的功能。
转换为稀疏数组
以常见的二维数组转换为稀疏数组来举例,具体步骤如下:
- 遍历源数组,获取有效数据的个数,保存到变量sum中。
- 创建稀疏数组,行数为sum+1,列数为3列,第一行的三个元素分别为源数组行数,列数以及sum,后面每一行分别为有效数据在源数组中的位置以及值。
public static int[][] arrayToSparseArray(int[][] arr){// 1.获取数组中不为0的元素的个数
int arrHeight = arr.length;
int arrLength = arr[0].length;
int sum = 0;
for (int i = 0; i < arrHeight; i++) {
for (int j = 0; j < arrLength; j++) {
if (arr[i][j] != 0) {
sum++;
}
}
}
// 2.创建稀疏数组,列数为3,行数为sum+1,第一行存储原数组长度,后面行存储原数组不为0值的位置以及值
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = arrHeight;
sparseArr[0][1] = arrLength;
sparseArr[0][2] = sum;
// 3.将原数组中不为0的值存储到稀疏数组中
int count = 1;
for (int i = 0; i < arrHeight; i++) {
for (int j = 0; j < arrLength; j++) {
if (arr[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
count++;
}
}
}
return sparseArr;
}
转换为二维数组
稀疏数组转换为二维数组步骤如下:
- 获取稀疏数组第一行数据,创建二维数组。
- 获取稀疏数组后续数据,赋值给二维数组对应元素。
public static int[][] sparseArrayToArray(int[][] sparseArr){// 1.从稀疏数组中获取第一行的值来创建数组
int arrHeight = sparseArr[0][0];
int arrLength = sparseArr[0][1];
int[][] arr = new int[arrHeight][arrLength];
// 2.从稀疏数组中获取值赋予给新创建的数组
for (int i = 1; i < sparseArr.length; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
return arr;
}
测试
public static void main(String[] args) {// 创建一个二维数组
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[4][5] = 2;
System.out.println("二维数组为:");
for (int[] row : chessArr1) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
System.out.println("转换为稀疏数组:");
int[][] parseArray = SparseArray.arrayToSparseArray(chessArr1);
for (int[] row : parseArray) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
System.out.println("转换为二维数组:");
int[][] sparseArrayToArray = SparseArray.sparseArrayToArray(parseArray);
for (int[] row : sparseArrayToArray) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
}
输出如下:
二维数组为:0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
转换为稀疏数组:
11 11 3
1 2 1
2 3 2
4 5 2
转换为二维数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
欢迎关注我的公众号,一起学习技术。
以上是 【Java】稀疏数组 的全部内容, 来源链接: utcz.com/a/111646.html
得票时间