稀疏sparsearray数组
- 适用前提:大部分元素为0/是同一个值的数组。
- 处理方法:
- 第一行记录数组(几行+几列+几个不同值)
- 依次列出不同值元素(所在行+所在列+值)
稀疏数组举例:
二维数组与稀疏数组转换
- 遍历二维数组–>有效数据的个数sum
- 根据sum可以创建稀疏数组sparseArr int[sum+1]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(); } } }
|
#