好友
阅读权限10
听众
最后登录1970-1-1
|
炮娘
发表于 2021-8-20 16:51
什么是稀疏数组
这种含有大量0或者同一个数值的情况下就可以考虑使用稀疏数组
通常来说为一个二维数组里面存放了大量 空 数值 例如
0 0 0 0 0 0
0 1 0 0 0 0
0 0 0 0 0 0
3 0 0 0 0 0 此数组为 7行6列数组 但实际有效值只有三个
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 5 0
第一行记录的信息是原始二维数组的行、列信息以及有效数据的个数
3 7 6 >>>> 此为转换后的数组 转换成为了一个4行3列的数组 3代表 原数组有三个有效数据 ,原来的矩阵为7行6列
1 1 1 >>>> 数据 1 在原数组的第二行第二列
3 3 0 >>>> 数据 3 在原数组的第四行第1列
5 6 4 >>>> 数据 5 在原数组的第六行第5列 [依次存储的是有效数据的行、列信息以及所代表的数值。
以下为代码实现
public class ArrayTest {
public static void main(String[] args) {
// 创建一个为7行6列的二维数组
int [][]arr = new int[7][6];
//赋值
arr[1][1]=1;
arr[3][0]=3;
arr[6][4]=5;
int count = 0;
//转换为稀疏数组以此简化数组
// 一 判断有效元素个数
for (int i=0;i<7;i++){
for (int k=0;k<6;k++){
if (arr[k]!= 0) {
count++;
}
}
}
//创建稀疏数组 sparseArray。
int [][] sparseArr = new int[count+1][3];
sparseArr[0][0]= count;
sparseArr[0][1]= 7;
sparseArr[0][2]= 6;
// 1 循环判段到一个有效数
int n = 0;
for (int i=0;i<7;i++){
for (int k=0;k<6;k++){
if (arr[k]!= 0) {
n++;
sparseArr[n][0]=arr[k];
sparseArr[n][1]= i;
sparseArr[n][2]= k;
}
}
}
for(int i = 0;i< sparseArr.length;i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[0],sparseArr[1],sparseArr[2]);
}
System.out.println();
}
}
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|