package zhuang.come.day.Arrays;
/*
稀疏数组
当一个数组中的大部分元素为0时,或者为同一个值得数组时,可以用稀疏数组
来保存该数组
稀疏数组的处理方式是:
1、记录数组一共有几行几列,有多少个不同值。
2、把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序
的规模。
*/
public class Demo04 {
public static void main(String[] args) {
int[][] array = new int[6][6];
//给二维数组中的非0数赋值
array[0][4] = 1;
array[2][5] = 2;
array[3][1] = 4;
array[5][4] = 5;
//输出原数组
System.out.println("输出原数组:");
//遍历二维数组
for (int[] ints : array) {
//ints.for
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("===============");
//1、转化为稀疏数组保存
//2、获取有效值的个数
int sum = 0;//记录二维数组中有效值的个数
int a = 0;//用于下面创建稀疏数组时表示第一行中列的个数
for (int i = 0;i<array.length;i++){
for (int j = 0;j<array[i].length;j++){
if (array[i][j]!=0){
sum++;
a = array[i].length;
}
}
}
System.out.println("有效值的个数为:"+sum);
//创建一个稀疏数组
int[][] array1 = new int[sum+1][3];//稀疏数组的列是固定的3
array1[0][0] = array.length;
array1[0][1] = a;
array1[0][2] = sum;
//遍历二维数组,将非零的值存放到稀疏数组中
int cum = 0;//获取有效数的个数,也是稀疏数组除第一行外的行数
for (int i = 0;i<array.length;i++){
for (int j = 0;j<array[i].length;j++){
if (array[i][j]!=0){
cum++;
array1[cum][0] = i;
array1[cum][1] = j;
array1[cum][2] = array[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组为:");
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("============");
//将稀疏数组转化为原数组
int[][] array2 = new int[array1[0][0]][array1[0][1]];
//给它的元素还原它的值
//注意此处i为1不为0
for (int i = 1; i < array1.length; i++) {
array2[array1[i][0]][array1[i][1]] = array1[i][2];
}
System.out.println("将稀疏数组转化为原数组:");
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}