[数据结构]稀疏数组
稀疏数组:只保存关键数据,压缩相同的数据。
package com.datastruct;
public class SparseArray {
/**0填充的数组 */
public int[][] getArray(int width,int height){
int[][] arr = new int[width][height];
//填充0
//遍历二维数组中的一维数组
for(int[] on : arr ){
//遍历一维数组,并赋值
for(int num : on){
num = 0;
}
}
return arr;
}
/**输出稀疏数组 */
public int[][] toSpareArray(int[][] array){
//数组总行数
int width = array.length;
//数组总列数
int height = array[0].length;
//黑白子总数
int sum = 0;
for(int[] on : array){
for(int num : on){
if(num != 0){
sum++;
}
}
}
int[][] sparse = new int[sum+1] [3];
int nonius = 1; // 游标
//总行数
sparse[0][0] = width;
//总列数
sparse[0][1] = height;
//数据数量
sparse[0][2] = sum;
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
if(array[i][j] != 0){
sparse[nonius][0] = i;
sparse[nonius][1] = j;
sparse[nonius][2] = array[i][j];
nonius++;
}
}
}
return sparse;
}
/**输出普通数组*/
public int[][] toArray(int[][] sparse){
int width = sparse[0][0];
int height = sparse[0][1];
int sum = sparse[0][2];
//还原行和列
int[][] array = new int[width][height];
//还原数据
for(int i=1;i<sparse.length;i++){
width = sparse[i][0];
height = sparse[i][1];
int data = sparse[i][2];
array[width][height] = data;
}
return array;
}
/**输出*/
public void toString(int[][] arr){
for(int[] on : arr){
for(int num : on){
System.out.print(num);
}
System.out.print('\n');
}
}
}
测试类
import com.datastruct.SparseArray;
public class App {
public static void main(String[] args) throws Exception {
//原始数组
SparseArray sparseArray = new SparseArray();
for(int[] on : sparseArray.getArray(15, 15)){
for(int num : on){
System.out.print(num);
}
System.out.print('\n');
}
//添加数据
int [][] arr1 = new int[15][15];
arr1[1][9] = 8;
arr1[4][10] = 9;
System.out.println("原始数组xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
sparseArray.toString(arr1);
System.out.println("稀疏数组xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
int[][] arr2 = sparseArray.toSpareArray(arr1);
sparseArray.toString(arr2);
System.out.println("还原xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
//还原数组
sparseArray.toString(sparseArray.toArray(arr2));
}
}