稀疏数组压缩思路
遍历稀疏array1取出非零元素的行列值,存入array2。
解压时去取表头里的行列的值创建array3,遍历array2给将对应的值赋给array3.注意!!此时遍历array 是从i=1 开始否则会出现数组越界的情况。
具体代码实现(有点乱将就看!)
// An highlighted block
//创建稀疏数组并赋值
public static void main(String[] args) {
int[][] array = new int[11][11];
array[1][2]=1;
array[2][3]=3;
//输出原始数组
for ( int[] a:array) {
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();
}
//创建稀疏数组
//获取有效值的个数
int[][] array2 ;
int sum = 0;
for ( int[] a:array) {
for (int i = 0; i <a.length ; i++) {
if (a[i]!=0){
sum++;
}
}
}
System.out.println( "有效值个数"+sum);
System.out.println(""+1+2);
array2 = new int[sum+1][3];//为什么是sum+1 因为第一行存着多少行多少列 所以 sum +1
array2[0][0] =11;
array2[0][1] =11;
array2[0][2] =sum;
//遍历数组 非零值存入 array2
int count = 0;
for (int i = 0; i <array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
if (array[i][j]!=0){
count++;
//存行列值
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array[i][j];
}
}
}
//输出稀疏数组
System.out.println("=================================输出稀疏数组====================");
for (int[] a1:array2
) {
System.out.println(Arrays.toString(a1));
}
//还原数组
System.out.println("=================================还原稀疏数组====================");
int[][] array3 = new int[array2[0][0]][array2[0][1]];
// System.out.println(array2.length);// 因为
for (int i = 1; i <array2.length ; i++) {
//array[11][11] 从0 起算 而new int[][] 里面是从1 开始算的 是个数 所以我们的i 要从1开始
array3[array2[i][1]][array2[i][2]] =array2[i][2];
}
//输出解压后数组
for ( int[] a:array3) {
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();
}
}