稀疏数组
2021-04-02 03:24
标签:throws 其他 param 效果 red 取数据 二维 reader 赋值 稀疏数组: 稀疏数组的处理方法是: 如二维数组如下: 转为稀疏数组如下: 代码示例: 打印结果: 稀疏数组 标签:throws 其他 param 效果 red 取数据 二维 reader 赋值 原文地址:https://www.cnblogs.com/zjw-blog/p/13508338.html
当一个数组(包括多维数组)中大部分元素为0,或者为同一个值的数组时,,为了节约空间起到压缩的效果,将数据用另一种结构来表示,即稀疏数组。
记录数组一共有几行几列,有多少个不同的值
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
共4行5列,其中大部分值为0,3个非0数值{
0 0 6 0 0
5 0 0 9 0
0 0 0 0 0
0 0 0 0 0
}
其中第一行[0][0],[0][1],[0][2]表示原始数组的行数、列数、非0的个数
后面的3行中的每一行表示一个非0数值所在的行列及值的大小,如(0,3,6)表示原始数组的第0行第3列的值为6{
4 5 3
0 3 6
1 0 5
1 3 9
}
public class SparseArray {
public static void main(String[] args) throws IOException {
//1、创建一个二维数组
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1 ;
chessArr1[2][3] = 2 ;
System.out.println("原始二维数组:");
//记录非0的个数
int sum = 0;
for (int[] rows : chessArr1){
for (int data : rows){
System.out.printf("%2d ",data);
if (data!=0)
sum++;
}
System.out.println();
}
//2、将二维数组转为稀疏数组
//为稀疏数组赋值
//赋值第0行
int[][] sparseArr = new int[sum+1][3];
sparseArr[0][0] = chessArr1.length;
sparseArr[0][1] = chessArr1[0].length;
sparseArr[0][2] = sum;
//赋值其他行
int count = 0;
for (int i=0; i
原始二维数组:
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 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 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
转换为的稀疏数组为:
11 11 2
1 2 1
2 3 2
转换后的二维数组为:
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 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 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