稀疏数组:

当一个数组在中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方法;

  1. 记录数组一共有几行几列,有多少个不同的值。

  2. 把具有不同值的元素的行列有值记录在一个小规模的数组中,从而缩小程序的规模。

代码:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
   // sparseArray(0);
long startTime = System.currentTimeMillis();
int sum = 2;
int[][] sparseArray = new int[1][3];

//代表的11行
sparseArray[0][0] = 11;
//11列
sparseArray[0][1] = 11;
//第1行的第3列 代表有效数据
sparseArray[0][2] = sum;
int[][] array = chessArrayBySparseArray(sparseArray);
for (int[] ints : array) {
for (int data : ints) {
System.out.printf("%d\t", data);
}
}
long endTime = System.currentTimeMillis();
System.out.println("总共花费:"+(endTime-startTime));
}

/**
* 原数组得到稀疏数组
*/
private static void sparseArray(int sum) {
int[][] chessArray = chessArray();
for (int[] rows : chessArray) {
for (int data : rows) {
//循环遍历得到不为零的数,用sum++
if (data != 0) {
sum++;
}
}
}
//System.out.println("sum"+sum);

//将二维数组转换为稀疏数组
//1.先将二维数组进行遍历,得到非0的有效数据
int[][] sparseArray = new int[sum + 1][3];

//代表的11行
sparseArray[0][0] = 11;
//11列
sparseArray[0][1] = 11;
//第1行的第3列 代表有效数据
sparseArray[0][2] = sum;
//遍历二维数组,记录数组非0的数据
int count = 0;


/* for (int i =0;i< 11;i++) {
for (int j=0;j<11;j++) {
if (chessArray[i][j]!=0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArray[i][j];

}
}
}*/
//外层循环为行
for (int i = 0; i < chessArray.length-1; i++) {
//内层循环为列
for (int j = 0; j < chessArray.length-1; j++) {
if (chessArray[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArray[i][j];
}

}
}
System.out.println("稀疏数组!!!");
System.out.println();
for (int[] ints : sparseArray) {
for (int data : ints) {
System.out.printf("%d\t", data);
}
}
}

/**
* 打印原数组
*/
private static int[][] chessArray() {
//创建一个二维数组
int[][] chessArray = new int[11][11];
//1表示红色棋子 2表示蓝色棋子 0表示没有棋子
//代表第2行,第3列有个红色棋子
chessArray[1][2] = 1;
//代表第3行的第四列有个蓝色棋子
chessArray[2][3] = 2;
System.out.println("原数组为:");
for (int[] rows : chessArray) {
for (int data : rows) {
//得到原数组
System.out.printf("%d\t", data);
}
}
return chessArray;
}
}

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 稀疏数组:
,