zoukankan      html  css  js  c++  java
  • 稀疏数组转化二维数组

    public class Sparse {
    /**
    * 稀疏数组 在一个大型矩阵中,根据坐标去找值,当一个值出现的次数过多时,那个值就是无意义的。
    * 稀疏数组的存储方式(从0开始)
    * 行 列 值
    * [0] 第一行是总行数 第一行是总列数 第一行是总共出现的值
    * [1] 1 2 36 (第一行第二列的所储存的值是36)
    */

    public static void main(String[] args) {
        int[][] arrays=new int[9][9];//第一个代表的是行,第二个代表的是列,就像是规定了长度
        arrays[2][3]=1;//赋值,第二行第三列的值是1
        arrays[3][3]=3;//赋值,第三行第三列的值是3
        //输出原始的数组
        System.out.println("输出原始的数组");
    
        for(int[] ints:arrays){//第一次for循环相当于是行数
            for(int anInt:ints){//第二次for循环相当于是列数
                System.out.print(anInt+"	");//输出值
            }
            System.out.println();
        }
        System.out.println("=============");
    
        //转化为稀疏数组保存
        //获取有效值的个数
        //判断是否有值
        int sum=0;//临时变量,计数用的
        for (int i=0;i<9;i++){//遍历行数
            for(int j=0;j<9;j++){//遍历列数
                if(arrays[i][j]!=0){//判断这个位置的坐标是不是0,不是0进入判断
                    sum++;//个数加1
                }
            }
        }
    
        System.out.println("有效值的个数"+sum);
    
        //2.创建一个稀疏数组的数组
        int[][] array2=new int[sum+1][3];//稀疏数组定义长度,动态初始化,是长度。行数因为第一行显示的是总行数,所以从第二位开始,所以要加1,第二个[]长度是3,下标就额是012
        array2[0][0]=9;//第一行,总行数
        array2[0][1]=9;//第一行,总列数
        array2[0][2]=sum;//总共有多少个值
    
        //遍历二维数组,将非零的值,存放稀疏数组中
        int count=0;//临时数组
        for(int i=0;i<arrays.length;i++){//遍历行数
            for(int j=0;j<arrays[i].length;j++){//遍历列数
                if(arrays[i][j]!=0){//如果行列不是0,进入判断
                    count++;//count+1
                    array2[count][0]=i;//行数
                    array2[count][1]=j;//列数
                    array2[count][2]=arrays[i][j];//arrays[i][j]代表着数组的坐标
                }
            }
        }
        System.out.println("稀疏数组");
        for(int i=0;i<array2.length;i++){//正常遍历条件
            System.out.println(array2[i][0]+"	"+array2[i][1]+"	"+array2[i][2]+"	");
        }
    
        System.out.println("======还原======");
        //1.读取稀疏数组
        int[][] array3=new int[array2[0][0]][array2[0][1]];//动态初始化长度,new int[][]里面就是上面已经定义好的。可以看成 int[][] array3=new int[9][9];
    
        //2.給其中的元素还原它的值
        //array2的数组是   9   9   2   这是首行,不用读取,直接从第一行开始读取所以 i=1
    
        System.out.println(array2.length+"!!!");
        for(int i=1;i<array2.length;i++){//第0行是头部信息,不用读取
            //array3[][]定位,查找稀疏数组的 行 列 并将值赋給 array3[][]
            array3[array2[i][0]] [array2[i][1]]= array2[i][2];
    
        }
    
        //3.打印数组
        System.out.println("输出还原的数组");
    
        for(int[] ints:array3){//第一次for循环相当于是行数
            for(int anInt:ints){//第二次for循环相当于是列数
                System.out.print(anInt+"	");//输出值
            }
            System.out.println();
        }
        System.out.println("=============");
    
    }
    

    }

  • 相关阅读:
    post 跨域
    鼠标滚轮 控制作用滚动
    es5的特性 有多少你没用过
    javascript 定义修改属性值
    javascript 原型继承
    C# windows 服务 操作实例
    linq to xml 操作实例
    伪随机数 避免操作
    linq 分组包含时间操作
    时间转换操作
  • 原文地址:https://www.cnblogs.com/sanshuishui/p/14205049.html
Copyright © 2011-2022 走看看