定义
稀疏数组,简单描述就是:当一个数组(以二维为例)中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。所以当出现这种情况的时候,我们可以将数组进行改变结构,具体方法是:
1)记录数组一共有几行几列,有多少个不为零的值
2)把具有不为零的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
如图(这里用一下尚硅谷的图dddd(手动doge)):
实现程序:
public class sparsearray {
public static void main(String[] args) {
//1.先创建一个正常的数组并填写数字
int normalArr[][] = new int[10][10];
normalArr[5][4] = 21;
normalArr[7][0] = 85;
normalArr[0][9] = 7;
//2.遍历原来的数组得到不为零的那些值的个数
int sum = count(normalArr);
//3.根据不为零数据的个数创建稀疏数组
int SparseArray[][] = new int[sum+1][3];//这里取sum+1的是因为需要一行将原数组的大小(几行几列)也记录下来
SparseArray[0][0] = 10;
SparseArray[0][1] = 10;
SparseArray[0][2] = sum;
//4.将有效数据存储进去
int loc = 1;//用于记录存储了几个数据
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
if (normalArr[i][j] != 0){
SparseArray[loc][0] = i;
SparseArray[loc][1] = j;
SparseArray[loc][2] = normalArr[i][j];
loc++;
}
}
}
for (int[] a: SparseArray){
for (int b : a){
System.out.print(b+" ");
}
System.out.println();
}
}
public static int count(int[][] normalArr){
int sum = 0;
for (int[] a: normalArr){
for (int b: a){
if (b != 0) sum++;
}
}
return sum;
}
}