稀疏数组
当数组中大部分元素为0或为同一个元素时,可用稀疏数组保存该数组
0 0 0 22 0 0 0 0 0 0 -1
0 36 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 -62 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 98 0 0 0
0 0 0 65 0 0 0 0 0 0 0
↓ ↓ ↓
11 11 7
0 3 22
0 10 -1
1 1 36
3 9 -62
7 0 3
9 7 98
10 3 65
稀疏数组特点:
1.三列;
2.第一行:行数、列数、非零元素个数;
3.其余各行:非零元素的行、列、值
代码
//将数组转为稀疏数组
public void sparseArray() {
//1.列出数组
int[][] arr = new int[11][11];
arr[0][3] = 22;
arr[0][10] = -1;
arr[1][1] = 36;
arr[3][9] = -62;
arr[7][0] = 3;
arr[9][7] = 98;
arr[10][3] = 65;
//2.统计非零元素
int sum = 0;
for(int[] tempArr : arr) {
for(int i : tempArr) {
System.out.printf("%d\t",i);
if(i != 0) {
sum ++;
}
}
System.out.println();
}
System.out.println("sum = " + sum);
//3.创建稀疏数组
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][2] = sum;
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
//4.遍历原数组并列出稀疏数组
int count = 1;
for(int i = 0; i < 11; i ++) {
for(int j = 0; j < 11; j ++) {
if(arr[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
count ++;
}
}
}
for(int[] tempArr : sparseArr) {
System.out.printf("%d\t%d\t%d\n",tempArr[0],tempArr[1],tempArr[2]);
}
}