稀疏数组
-
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
-
稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模数组中,从而缩小数组的规模
package com.ycy;
import java.lang.reflect.Array;
import java.util.Arrays;
public class demo {
public static void main(String[] args) {
int[][]a = new int[11][11] ;
a[1][2]=1;
a[2][3]=2;
//输出原始数组(用foreach循环)
for (int b[]:a) {
for (int c:b) {
System.out.print(c+"\t");
}
System.out.println();
}
//转换为稀疏数组
// 1.获取有效值
int sum = 0;
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j <a[i].length ; j++) {
if (a[i][j]!=0){
sum++;
}
}
}
// 2.创建一个稀疏数组
int c[] [] = new int[sum+1][3];
c[0][0] = 11;
c[0][1] = 11;
c[0][2] = sum;
// 3.遍历原来的二维数组,将其中非0的值放到稀疏数组中
int count = 1;
for (int i = 0; i <a.length; i++) {
for (int j = 0; j <a[i].length ; j++) {
if (a[i][j]!=0){
c[count][0]=i;
c[count][1]=j;
c[count][2]=a[i][j];
count++;
}
}
}
// 输出稀疏数组
for (int i = 0; i < c.length ; i++) {
System.out.println(c[i][0]+"\t"+c[i][1]+"\t"+c[i][2]+"\t");
}
// 还原原始数组
// 1.读取系数数组
int [][] d = new int[c[0][0]][c[0][1]];
// 2.给其中的元素还原值
for (int i = 0; i <c.length-1; i++) {
d[c[i+1][0]][c[i+1][1]] = c[i+1][2];
}
// 打印还原后的原始数组
for (int i = 0; i <d.length; i++) {
for (int j = 0; j <d[i].length ; j++) {
System.out.print(d[i][j]+"\t");
}
System.out.println();
}
}
}