稀疏数组
1.应用场景
当一个数组中大部分元素为0或者为同一个值的数组时,可以用稀疏数组来保存该数组。
例如:棋盘、地图
2.处理方法
1)记录原数据共有几行几列,多少个不同的值
2)把不同值的元素的行列及值(data)记录在一个数组中
3.图解
注:图片转自网路,侵删
4.代码实现
4.1Java实现
package cn.iyhome;
public class SparseArr {
public static void main(String[] args) {
//创建原始数组
int[][] chessArr = new int[10][11];//五子棋棋盘
chessArr[1][2] = 1;//黑子
chessArr[2][3] = 2;//白字
//打印棋盘
for (int[] row : chessArr) {
for (int data : row) {
System.out.printf(data + "\t");
}
System.out.println();
}
//转为稀疏数组
//1.统计原始数组有效个数
int sum = 0; //原始数组有效个数
int row = 0; //原始数组行
int column = 0;//原始数组 列/row
for (int[] rows : chessArr) {
row += 1;
for (int data : rows) {
column += 1;
if (data != 0)
sum += 1;
}
}
System.out.println("------------------------------------------");
//System.out.println(sum + " " + row + " " + column / row);
//2.创建稀疏数组
int[][] sparesArr = new int[sum + 1][3];
sparesArr[0][0] = row;
sparesArr[0][1] = column / row;
sparesArr[0][2] = sum;
//3.将非0放入到稀疏数组
int srow = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < column / row; j++) {
if (chessArr[i][j] != 0) {
sparesArr[srow][0] = i;
sparesArr[srow][1] = j;
sparesArr[srow][2] = chessArr[i][j];
}
}
srow += 1;
}
//打印稀疏数组
/*for (int[] ints : sparesArr) {
for (int anInt : ints) {
System.out.printf(anInt + "\t");
}
System.out.println();
}*/
}
}