稀疏数组
当一个数组中大部分元素是0的时候,或者为同一个值的数组的时候,可以用稀疏数组来保存改数组。
稀疏数组的处理方式:
记录数组有几行几列。有多少个不同值。
把具有不同值的元素和行列以及值记录在 一个小规模的数组中,从而缩小程序的规模
代码实现
package sparsearray;
public class SparseArray {
public static void main(String[] args) {
int a[][] = new int[10][10];//a是原数组
Sparse spa = new Sparse();
spa.add(a, 1, 2, 1);
spa.add(a, 2, 3, 1);
spa.print(a);
System.out.println("*************************");
int b[][] = spa.create(a);//b是稀疏数组
spa.print(b);
System.out.println("*************************");
int c[][] = spa.back(b);
spa.print(c);//c是稀疏数组还原后的数组
}
}
class Sparse{
private int cmp = 0;//记载数组a中有几个与0不同的数
private int b[][];
private int c[][];
private int line = 1;//稀疏数组的行数
public Sparse(){
}
//在数组a中加入不等于0的元素
public void add(int a[][], int m, int n, int k){
if(m > a.length || n > a[0].length){
System.out.println("数字越界");
return;
}
a[m][n] = k;
}
//输出数组
public void print(int a[][]){
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++){
System.out.printf("%d\t", a[i][j]);
}
System.out.println();
}
System.out.println();
}
//创建稀疏数组
public int[][] create(int a[][]){
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++){
if(a[i][j] != 0){
cmp++;
}
}
}
b = new int[cmp + 1][3];
b[0][0] = a.length;
b[0][1] = a[0].length;
b[0][2] = cmp;
for(int i = 1; i < a.length; i++){
for(int j = 0; j < a[i].length; j++){
if(a[i][j] != 0){
b[line][0] = i;
b[line][1] = j;
b[line][2] = a[i][j];
line++;
}
}
}
return b;
}
//稀疏数组变回原数组
public int[][] back(int a[][]){
c = new int [a[0][0]][a[0][1]];
for(int i = 1; i < a.length; i++){
c[a[i][0]][a[i][1]] = a[i][2];
}
return c;
}
}