首页 > 编程语言 > 详细

稀疏数组问题

时间:2020-06-08 09:45:24      阅读:45      评论:0      收藏:0      [点我收藏+]

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,稀疏数组的处理方法是:

  • 记录数组一共有几行几列,有多少个不同的值
  • 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 即第一行第一列记录记录原始数组行数,第一行第二列记录原始数组列数,第一行第三列总共有多少个值,第二行记录第一个有效数据,第三行记录第二个有效数据技术分享图片
  • public static void main(String[] args) {
            //1.创建一个二维数组 11*11
            //0 没有棋子  1 黑棋 2 白棋
            int[][] array1=new int[11][11];
            array1[1][2]=1;
            array1[2][3]=2;
            //输出原始数组
            for (int i = 0; i <array1.length ; i++) {
                for (int j = 0; j <array1[i].length ; j++) {
                    System.out.print(array1[i][j]+"\t");
                }
                System.out.println();
            }
        }

    以上代码创建一个棋盘完毕

  变为稀疏数组

 1  //转换为稀疏数组
 2 
 3         //1.获取有效值个数
 4         int sum = 0;
 5         for (int i = 0; i < 11; i++) {
 6             for (int j = 0; j < 11; j++) {
 7                 if (array1[i][j] != 0) {
 8                     sum++;
 9                 }
10             }
11         }
12 
13         System.out.println("有效值的个数:"+sum);
14         //2.得到稀疏数组的数组
15         int[][] array2=new int[sum+1][3];
16         array2[0][0]=11;
17         array2[0][1]=11;
18         array2[0][2]=sum;
19         //遍历二维数组,将非零值放入稀疏数组
20         int count=0;
21         for (int i = 0; i < array1.length; i++) {
22             for (int j = 0; j <array1[i].length ; j++) {
23                 if(array1[i][j]!=0){
24                     count++;
25                     array2[count][0]=i;
26                     array2[count][1]=j;
27                     array2[count][2]=array1[i][j];
28                 }
29             }
30         }
31         //输出稀疏数组
32         System.out.println("稀疏数组:");
33         for (int i = 0; i < array2.length; i++) {
34             System.out.println(array2[i][0]+"\t"
35                     +array2[i][1]+"\t"
36                     +array2[i][2]);
37 
38         }

还原数组

 1  // 还原稀疏数组
 2         System.out.println("还原稀疏数组");
 3         //读取稀疏数组
 4         int[][] array3=new int[array2[0][0]][array2[0][1]];
 5         //给其他数组还原值
 6         for (int i = 1; i < array2.length; i++) {
 7             array3[array2[i][0]][array2[i][1]]=array2[i][2];
 8         }
 9         //输出array3
10         for (int i = 0; i < array3.length; i++) {
11             for (int j = 0; j < array3[i].length; j++) {
12                 System.out.print(array3[i][j] + "\t");
13             }
14             System.out.println();
15         }
16     }

 

稀疏数组问题

原文:https://www.cnblogs.com/wyx1504/p/13063095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!