稀疏数组

稀疏sparsearray数组

  • 适用前提:大部分元素为0/是同一个值的数组。
  • 处理方法:
    • 第一行记录数组(几行+几列+几个不同值)
    • 依次列出不同值元素(所在行+所在列+值)

稀疏数组举例:


二维数组与稀疏数组转换

  1. 遍历二维数组–>有效数据的个数sum
  2. 根据sum可以创建稀疏数组sparseArr int[sum+1]3
  3. 二维数组有效数据存到稀疏数组

转换代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[][] a=new int[11][11];//原始数组为11*11的矩阵
a[1][2]=1;//数组里面的第二行第三列数字为1
a[2][3]=2;//数组里面的第三行第四列数字为2
System.out.println("原始数据:");
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
System.out.printf("%d\t",a[i][j]);
}
System.out.println();
}

//二维数组a-----稀疏数组b
int sum=0;//记录一共多少个非0数
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
if(a[i][j]!=0)//非0的情况就加一
{
sum++;//记录一共有多少非0数
}
}
}
System.out.println("一共有"+sum+"个非0数字");
int[][] b=new int[sum+1][3];//sum行列每一个行列值 每个数都是三列元素
b[0][0]=11;//第一行放数组的行+列+sum
b[0][1]=11;
b[0][2]=sum;
int flag=1;//下标变换存数
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
if(a[i][j]!=0)
{

b[flag][0]=i;
b[flag][1]=j;
b[flag][2]=a[i][j];
flag++;//只能等这一行放入了再flag++
}
}
}
//输出稀疏数组
System.out.println("稀疏数组:");
for(int i=0;i<sum+1;i++)
{
for(int j=0;j<3;j++)
{
System.out.printf("%d\t",b[i][j]);
}
System.out.println();
}

//稀疏数组b-----二维数组c
int[][] c=new int[b[0][0]][b[0][1]];
int flag1=1;
for(int i=1;i<b.length;i++)
{
c[b[i][0]][b[i][1]]=b[i][2];
}
//输出c数组
System.out.println("输出原数组:");
for(int i=0;i<c.length;i++)
{
for(int j=0;j<c[i].length;j++)
{
System.out.printf("%d\t",c[i][j]);
}
System.out.println();
}
}
}

#

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 稀疏sparsearray数组
  2. 2. 二维数组与稀疏数组转换
  3. 3. #
,