介绍

使用场景

棋盘存储

实现思路

二维数组转稀疏数组

1.遍历原始数组arr,得到有效数据的个数sum
2.根据sum创建稀疏数组sparseArr int[sum+1][3]
3.将二维数组的有效数据存入到稀疏数组

js版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function sparseArr (arr) {
const sparseArr = [[]]
sparseArr[0][0] = arr.length
sparseArr[0][1] = arr[1].length
sparseArr[0][2] = 0

for (let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr[i].length; j++) {
if(arr[i][j] !== 0) {
sparseArr[0][2]++
sparseArr.push([i, j, arr[i][j]])
}
}
}
return sparseArr
}

Java版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static int[][] sparseArr(int[][] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != 0) {
sum++;
}
}
}
int sparseArr[][] = new int[sum+1][3];
sparseArr[0][0] = arr.length;
sparseArr[0][1] = arr[0].length;
sparseArr[0][2] = sum;
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
return sparseArr;
}

稀疏数组转二维数据

1.先读取稀疏数组的第一行,创建二维数组
2.读取稀疏数组后几行数据,赋值给二维数组

js版

1
2
3
4
5
6
7
function reductionArr(sparseArr) {
const arr = Array(sparseArr[0][0]).fill(0).map(x => Array(sparseArr[0][1]).fill(0));
for(let i = 1; i < sparseArr.length; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]
}
return arr
}

Java版

1
2
3
4
5
6
7
public static int[][] reductionArr(int[][] sparseArr) {
int arr[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
return arr;
}

最后更新: 2021年11月18日 13:50