java稀疏数组实现
程序员文章站
2022-07-10 17:38:22
稀疏数组原理介绍1.稀疏数组是将数据量较大且有很多重复元素的情况下,将大的数组转换为更简单占空间更小的数组2.可用于下五子棋中途要去拉粑粑,来先记录下这一局棋子的分布假设有如下棋局0为空棋盘 1为黑棋 2为白棋0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 00 0 0 2 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00...
稀疏数组原理介绍
1.稀疏数组是将数据量较大且有很多重复元素的情况下,将大的数组转换为更简单占空间更小的数组
2.可用于下五子棋中途要去拉粑粑,来先记录下这一局棋子的分布
假设有如下棋局
0为空棋盘 1为黑棋 2为白棋
0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 2 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
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
使用稀疏数组可将此局转化为:
行 列 值
9 9 2
1 2 1
2 3 2
也可实现相互转换。
代码演示
public static void main(String[] args) {
//11行11列格子 1 为黑棋 2为白棋
int[][] array1=new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//打印原始的数组
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
System.out.println("=====================================");
//获取有效值的个数
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j <11 ; j++) {
if (array1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数是"+sum);
int[][] array3=new int[sum+1][3];
array3[0][0]=11;
array3[0][1]=11;
array3[0][2]=sum;
//转换为稀疏数组保存
int x=0;
for (int i = 0; i < array3[0][0]; i++) {
for (int j = 0; j < array3[0][1]; j++) {
if (array1[i][j]!=0){
x++;
array3[x][0]=i;
array3[x][1]=j;
array3[x][2]=array1[i][j];
}
}
}
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
System.out.println("=====================================");
//稀疏数组转换为原始数组
int[][] array4=new int[array3[0][0]][array3[0][1]];
for (int i = 1; i < array3.length; i++) {
array4[array3[i][0]][array3[i][1]]=array3[i][2];
}
for (int[] ints : array4) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
}
输出结果
本文地址:https://blog.csdn.net/baipiaoge/article/details/109850296
上一篇: 天妇罗是什么?日本的四大料理是哪些?