稀疏数组应用场景
- 概念
当一个数组大部分元素为0,或者为同一个值得数组时,可以使用稀疏数组来存储该数组 - 稀疏数组的处理方法
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值元素的行列以及值记录在一个小规模数组中,从而缩小程序的规模
五子棋问题
稀疏数组转换的思路分析
二维数组转稀疏数组的思路
稀疏数组转换成原始的二维数组思路
- 读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
- 在读取稀疏数组后几行的数组,并赋值给原始的二维数组即可
代码实现
/**
* 将二维数组转换成稀疏数组
* @param erwei
* @return
*/
public static int[][] erweitoxishu(int erwei[][]){
//获取二维数组的长度以及宽度
int length = erwei.length;
int width = erwei[0].length;
int feiling = 0;
for(int i = 0;i < length;i++){
for(int j = 0;j < width;j++){
if(erwei[i][j] != 0){
feiling++;
}
}
}
int xishu[][] = new int[feiling + 1][3];
xishu[0][0] = length;
xishu[0][1] = width;
xishu[0][2] = feiling;
int nowI = 1;
for(int i = 0;i < length;i++){
for(int j = 0;j < width;j++){
if(erwei[i][j] != 0){
xishu[nowI][0] = i;
xishu[nowI][1] = j;
xishu[nowI][2] = erwei[i][j];
nowI++;
}
}
}
return xishu;
}
public static int[][] xishutoerwei(int xishu[][]){
int erwei[][] = new int[xishu[0][0]][xishu[0][1]];
for(int i = 1;i < xishu.length;i++){
erwei[xishu[i][0]][xishu[i][1]] = xishu[i][2];
}
for (int[] row : erwei){
for(int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
return erwei;
}