使用java代码将一个稀疏数组试着转化成为java数组,java数组差集

  使用java代码将一个稀疏数组试着转化成为java数组,java数组差集

  00-1010一、什么是稀疏阵列二。场景使用1。二维阵列到稀疏阵列的思想2。稀疏阵列到二维阵列的思想3。代码实现

  00-1010当一个数组A中的大部分元素都是0或者相同的值时,那么可以用稀疏数组B来保存数组A。

  首先稀疏数组是一个数组,然后用特定的方式保存上面的数组A。具体的处理方法是:

  记录数组A有几行和几列。记录数组a中有多少个不同的值,最后记录不同值的元素的行和列,放在一个小数组中,减少程序的大小。这个小规模阵列是稀疏阵列。

  举个栗子的例子。左边是一个5行4列的二维数组,其中有6个非零值。然后根据规则可以转换成右边的稀疏数组。

  我理解00-1010的意思,但是这个东西有什么应用场景呢?现在举个例子,一个五子棋游戏有个程序要求:游戏可以保存,下次打开游戏可以续费。

  所以用二维数组记录五子棋棋盘的内容是非常直观的。

  但是因为这个二维数组很多值都是0,所以没有意义,可以考虑用稀疏数组来变换。

  00-1010如何改造,思路很简单:

  遍历原始二维数组,得到有效数据的个数和。根据和可以创建稀疏数组sparseArr,二维数组的有效数据可以存储在稀疏数组中。

  00-1010读取磁盘时,需要将稀疏性变回二维数组:

  首先,读取稀疏数组的第一行。根据第一行的数据,创建一个二维数组,继续读取稀疏数组最后几行的数据,给二维数组赋值。

  00-1010的流程很简单。顺便说一句,最好把稀疏数组保存到磁盘(代码中不包含),等要用的时候再读取转换回二维数组。

  类稀疏数组{ public static void main(string[]args){//创建原始二维数组,11*11 //0表示没有棋子,1表示黑子,2表示蓝子int chessar 1[][]=new int[11][11];chess ar 1[1][2]=1;chess ar 1[2][3]=2;//输出原始二维数组for(int[]row 3360 chess ar 1){ for(int data 3360 row){ system . out . printf( % d t ,data);} system . out . println();}//将二维数组转换成稀疏数组//1。先遍历二维数组得到非零数据的个数int sum=0;for(int I=0;I chessar 1 . length;I){ for(int j=0;j chess ar 1 . length;j){ if(chess ar 1[I][j]!=0){ sum;} } } system . out . println( sum : sum);//2.创建对应的稀疏数组int sparsearr[][]=new int[sum 1][3];//将sparseArr[0][0]=11赋给稀疏数组;sparseArr[0][1]=11;sparseArr[0][2]=sum;//3.遍历二维数组得到非零数据,存入sparseArr int count=0;//用来记录哪个非零数据为(int I=0;I chessar 1 . length;I){ for(int j=0;j chess ar 1 . length;j){ if(chess ar 1[I][j]!=0){ count;sparseArr[count][0]=I;sparseArr[count][1]=j;sparseArr[count][2]=chess ar 1[I][j];} } } }//输出稀疏数组System.out.println(稀疏数组:);for(int I=0;I稀疏r .长度;I){ system . out . printf( % d t % d t % d t n ,sparseArr[i][0],sparseArr[i][1],sparseArr[I][2]);} system . out . println();//将稀疏数组还原为原来的2D数组//1。先读取稀疏数组的第一行,根据第一行的数据创建原2D数组intchessarr 2[][]=new int[sparsearr[0][0]][sparsearr[0][1]];//2.读取稀疏数组最后几行的数据,赋给原二维数组for(int I=1;I稀疏r .长度;I){ ches sarr 2[sparseArr[I][0]][sparseArr[I][1]]=sparseArr[I][2];}//输出还原后的2D数组System.out.println(还原后的2D数组:);for(int[]row : chess ar 2){ for(int data : row){ system . out . printf( % d t ,data);} system . out . println();}}}运行结果:

  00亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿。更多关于java数据结构算法稀疏数组的信息,请关注其他热门IT相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: