首页 > 其他分享 >稀疏数组

稀疏数组

时间:2022-12-18 10:34:32浏览次数:34  
标签:数组 int System 稀疏 arr1 out

分析问题 因为二维数组的很多默认值是0,因此记录了很多没有意义的数据
解决: 稀疏数组(记录有效的坐标)

稀疏数组介绍

1 使用条件:

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

2 处理方式

    • 记录数组一共又几行几列,有多少个不同的值
    • 把具有不同值的元素 的 行、列、及值记录在一个小规模的数组中,从而缩小程序的规模
    1. 如下图

 

 

代码

记录棋盘
1 普通二维数组

int[][] arr1 = new int[11][11];
    arr1[1][2]=1;
    arr1[2][3]=2;
    System.out.println("原始数组");
    for (int[] outside : arr1) {
        for (int inside : outside) {
            //  /t 是空格
            System.out.print(inside+"\t");
        }
        System.out.println();
    }

2 稀疏数组

 //将原始数组转换为稀疏数组
    System.out.println("稀疏数组");
    int sum = 0;
    //读取原始数组
    for (int i = 0; i <arr1.length ; i++) {
        for (int j = 0; j <arr1[i].length ; j++) {
        if(arr1[i][j]!=0){
            sum++;
            }
        }
    }
        int[][] arr2 = new int[sum+1][4];
        //稀疏数组的头部信息 几行几列几个有效数字
        arr2[0][0]=11;
        arr2[0][5]=11;
        arr2[0][6]=sum;

        int count = 0;
        for (int i = 0; i <arr1.length ; i++) {
            for (int j = 0; j <arr1[i].length ; j++) {
                if(arr1[i][j]!=0){
                    count++;
                    arr2[count][0]=i;
                    arr2[count][7]=j;
                    arr2[count][8]=arr1[i][j];
                }
            }
        }
        for (int i = 0; i <arr2.length ; i++) {
            System.out.println(arr2[i][0]+"\t"
                    +arr2[i][9] +"\t"
                    +arr2[i][10]);
        }

3 还原数组

  System.out.println("还原稀疏数组");
     //读取稀疏数组的值
    int[][] arr3 = new int[arr2[0][0]][arr2[0][11]];
    //给其中的元素还原值
    //i从1开始,因为0行是稀疏数组的头部信息,不需要读取
    for (int i = 1; i <arr2.length ; i++) {
        for (int j = 0; j <arr2[i].length ; j++) {
            arr3[arr2[i][0]][arr2[i][12]] = arr2[i][13];
        }
    }
    for (int[] outside : arr1) {
        for (int inside : outside) {
            //  /t 是空格
            System.out.print(inside+"\t");
        }
        System.out.println();
    }

 

 

 

标签:数组,int,System,稀疏,arr1,out
From: https://www.cnblogs.com/Sco-/p/16990055.html

相关文章