【Java】稀疏数组

稀疏数组

程序开发与运维发布于 今天 06:38

对于一个数组,如果大部分元素都是0或者其他相同的值,只有少数不同的值时,就可以将这个数组转换稀疏数组来存储,从而缩小数组的规模,实现类似于压缩的功能。

转换为稀疏数组

以常见的二维数组转换为稀疏数组来举例,具体步骤如下:

  1. 遍历源数组,获取有效数据的个数,保存到变量sum中。
  2. 创建稀疏数组,行数为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;

}

转换为二维数组

稀疏数组转换为二维数组步骤如下:

  1. 获取稀疏数组第一行数据,创建二维数组。
  2. 获取稀疏数组后续数据,赋值给二维数组对应元素。

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】稀疏数组

java数据结构

阅读 30发布于 今天 06:38

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

程序开发与运维

1 声望

0 粉丝

0 条评论

得票时间

avatar

程序开发与运维

1 声望

0 粉丝

宣传栏

对于一个数组,如果大部分元素都是0或者其他相同的值,只有少数不同的值时,就可以将这个数组转换稀疏数组来存储,从而缩小数组的规模,实现类似于压缩的功能。

转换为稀疏数组

以常见的二维数组转换为稀疏数组来举例,具体步骤如下:

  1. 遍历源数组,获取有效数据的个数,保存到变量sum中。
  2. 创建稀疏数组,行数为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;

}

转换为二维数组

稀疏数组转换为二维数组步骤如下:

  1. 获取稀疏数组第一行数据,创建二维数组。
  2. 获取稀疏数组后续数据,赋值给二维数组对应元素。

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】稀疏数组

以上是 【Java】稀疏数组 的全部内容, 来源链接: utcz.com/a/111646.html

回到顶部