稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
代码实现:
package 稀疏数组;
import java.util.Arrays;
public class 稀疏数组代码实现 {
public static void main(String[] args) {
int[][] res = {
{0,0,0,0,0,0,0,0,0,10,2,0},
{0,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
};
//二维数组
printAll(res);
System.out.println("=================================================");
int len = res.length;
int wid = res[0].length;
int val = 0;
for(int i=0;i<len;i++){
for(int j=0;j<wid;j++){
if(res[i][j]!=0){
val++; //计算有效值个数
}
}
}
int[][] resSparse = new int[val+1][3]; //建立稀疏数组
resSparse[0][0] = len;
resSparse[0][1] = wid;
resSparse[0][2] = val;
int startLen = 1;
//对稀疏数组进行赋值
for(int i=0;i<len;i++){
for(int j=0;j<wid;j++){
if(res[i][j]!=0){
resSparse[startLen][0] = i;
resSparse[startLen][1] = j;
resSparse[startLen++][2] = res[i][j];
}
}
}
printAll(resSparse);
System.out.println("=================================================");
//还原为二维数组
int[][] resFinal = new int[resSparse[0][0]][resSparse[0][1]];
for(int i=1;i < val+1 ;i++){
resFinal[resSparse[i][0]][resSparse[i][1]] = resSparse[i][2];
}
printAll(resFinal);
}
public static void printAll(int[][] temp){
for(int i=0;i<temp.length;i++){
System.out.println(Arrays.toString(temp[i]));
}
}
}