package com.atguigu.sparsearray;
public class SparseArray {
public static void main(String[] args) {
//创建一个原始的二组数组 11*11
int [][] chessArr1 = new int[11][11];
chessArr1 [1][2] = 1; //黑子
chessArr1 [2][3] = 2; //篮子
//输出
System.out.println("原始二维数组:");
for (int []row: chessArr1) {
for (int data: row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//转换成稀疏数组
//1.先得到非0数值个数
int sum = 0; //非0个数
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[0].length; j++) {
if (chessArr1[i][j] != 0 ) {
sum++;
}
}
}
int [][] sparserArr1 = new int[sum+1][3];//稀疏数组
//第一行可以知道了
sparserArr1[0][0] = chessArr1.length;
sparserArr1[0][1] = chessArr1[0].length;
sparserArr1[0][2] = sum;
//下面的数据
int count = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[0].length; j++) {
if (chessArr1[i][j] != 0) {
count++;
sparserArr1[count][0] = i;
sparserArr1[count][1] = j;
sparserArr1[count][2] = chessArr1[i][j];
}
}
}
//遍历稀疏数组
System.out.println("稀疏数组:");
for (int [] row: sparserArr1) {
for (int item: row) {
System.out.printf("%d\t",item);
}
System.out.println();
}
//恢复为原始数组
int [][] chessArr2 = new int[sparserArr1[0][0]][sparserArr1[0][1]];
for (int i = 1; i <= sparserArr1[0][2]; i++) {
chessArr2[sparserArr1[i][0]][sparserArr1[i][1]] = sparserArr1[i][2];
}
//遍历
System.out.println("原始数组:");
for (int [] row: chessArr2) {
for (int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
SparseArrayDemo
最新推荐文章于 2024-07-05 14:51:01 发布