稀疏数组
概念
用来处理 具有 较多相同元素 的数组:(压缩数组)
- 稀疏数组共 3列,n+1行(n为原数组有效元素个数)
new int[n+1][3] - 第一行记录 元素组共有几行几列,共有多少个有效元素
- 后面n行 则分别记录 有效元素元素的 行,列,值

数组转换
二维数组转稀疏数组:
- 遍历原始二维数组,得到有效元素个数sum,行,列
- 根据sum创建 稀疏数组 sparseArr int[sum+1][3]
- 遍历二维数组,将有效元素 存入到稀疏数组
点击查看代码
//转为稀疏数组 n+1行,3列
/*第一行记录原始数组的 行,列,有效元素个数n */
public static int[][] toSparseArr(int[][] arr){
//1.遍历原始数组,记录有效元素个数
int n=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j]!=0){
n++;
}
}
}
//2.创建稀疏数组 【行,列,value】
int[][] sparseArr = new int[n+1][3];
//3.给稀疏数组赋值 ,第一行为总数组的行,列,有效元素个数
sparseArr[0][0] = arr.length;
sparseArr[0][1] = arr[0].length;
sparseArr[0][2] = n;
//遍历 有效元素,赋值给稀疏数组
n=1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j]!=0){
sparseArr[n][0] = i;//行
sparseArr[n][1] = j;//列
sparseArr[n][2] = arr[i][j];//value
n++; //记得n++,进入下一行赋值
}
}
}
return sparseArr;
}
稀疏数组转二维数组
- 先读取稀疏数组的第一行,从而创建原始数组
- 再读取稀疏数组的后几行,并赋值给原始数组
点击查看代码
//稀疏数组 转原二维数组
/*遍历第一行获得原始数组大小,创建原始数组,
遍历后续行,获得元素位置与value */
public static int[][] sparseArrToArr(int[][] sparseArr){
int row = sparseArr[0][0]; //行数
int col = sparseArr[0][1]; //列数
int[][] arr = new int[row][col];
//遍历后续行,给元素赋值
for (int i = 1; i < sparseArr.length; i++) {
row = sparseArr[i][0];
col = sparseArr[i][1];
arr[row][col] = sparseArr[i][2]; //获得对于位置value
}
return arr;
}
我是菜鸡啊

浙公网安备 33010602011771号