数据结构—稀疏数组
基本介绍:
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
第一行记录数组一共有几行几列,有多少个不同的值
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
1.1 二维数组转稀疏数组
遍历原始的二维数组得到行数sum
int sum = 0; //计数器,也等于稀疏数组的长度
for(int i = 0; i<arrays.length; i++){
for(int y = 0; y<arrays.length; y++){
if(arrays[i][y] != 0){
sum++;
}
}
}
根据sum去创建稀疏数组 sparse Arr int[sum+1] [3] (行时根据有效数值来确定,列时固定3列)
int sparseToArray[][] = new int[sum+1][3];
sparseToArray[0][0] = 11;
sparseToArray[0][1] = 11;
sparseToArray[0][2] = sum;
遍历二维数组,将二维数组的有效数据存入稀疏数组
int count = 0; //记录是第几个非0数据,用作行数
for(int i = 0; i<arrays.length; i++){
for(int y = 0; y<arrays.length; y++){
if(arrays[i][y] != 0){
count++;
sparseToArray[count][0] = i;
sparseToArray[count][1] = y;
sparseToArray[count][2] = arrays[i][y];
}
}
}
1.2 稀疏数组转二维数组
先根据稀疏数组的第一行数据创建原始二维数组
int arrayToSparse[][] = new int[sparseToArray[0][0]][sparseToArray[0][1]];
读取稀疏数组的后几行数据,然后赋值给二维数组
for(int i=1; i<sparseToArray.length;i++){
//行=稀疏数组的第i列第0列,列=第i行第1列,值=第i行第2列
arrayToSparse[sparseToArray[i][0]][sparseToArray[i][1]] = sparseToArray[i][2];
}