zoukankan      html  css  js  c++  java
  • 稀疏数组

    稀疏数组的应用场景:当二维数组中有大量重复数字(以0为例)时,可以用稀疏数组进行保存,节省保存空间。

    稀疏数组有三列n行

    第一行用来记录原二维数组信息,第一列用来记录原二维数组的行数,第二列用来记录二维数组的列数,第三列用来记录二维数组中非0个数。

    其他行用来记录非0元素的信息,第一列记录其在原二维数组中的行标,第二列记录列标,第三列用来记录其具体的值。

    可见稀疏数组的行数 n=二维数组非0元素的个数+1;

    代码练习:

    public class SparseArray {
        public static void main(String[] args) {
    
            //稀疏数组棋牌案例(0表示空格,1表示黑子,2表示白子)
    
            //创建一个原始棋牌
            int chesArr[][]= new int[11][11];
            chesArr[2][3] = 2;
            chesArr[5][6] = 1;
    
            int sum=0;//用来记录非0的个数
            for(int i=0;i<chesArr.length;i++){
                for(int j=0;j<chesArr[i].length;j++){
                    if(chesArr[i][j] !=0)
                        sum++;
                }
            }
    
            int[][] sparseArray = new int[sum+1][3];
            //第一行用来记录原二维数组的行和列,剩余的行用来记录非0数据的位置和值
            sparseArray[0][0] = 11;
            sparseArray[0][1] = 11;
            sparseArray[0][2] = sum;
    
            int count=1;
            for(int i=0;i<chesArr.length;i++){
                for(int j=0;j<chesArr[i].length;j++){
                    if(chesArr[i][j] !=0){
                        sparseArray[count][0]=i;//第一行用来记录元二维数组的非0数据的行
                        sparseArray[count][1]=j;//第二行用来记录元二维数组的非0数据的列
                        sparseArray[count][2] = chesArr[i][j];//第三行用来记录元二维数组的非0数据的值
                        count++;
                    }
                }
            }
    
            //还原数组
            int[][] chesArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
            for(int i=1;i<sparseArray.length;i++){
                int row=sparseArray[i][0];
                int line=sparseArray[i][1];
                chesArr2[row][line]=sparseArray[i][2];
            }
    
            //遍历
            for(int[] row : chesArr2){
                for(int data : row){
                    System.out.print(" "+data);
                }
                System.out.println();
            }
        }
    
    }
  • 相关阅读:
    test14
    test13
    test12
    test11
    Xcode常用快捷键
    OC弱语法
    对象的结构体属性的成员修改
    IOS 获取手机各种信息
    IOS app启动过程
    iOS退出键盘的两种方式
  • 原文地址:https://www.cnblogs.com/susexuexi011/p/14049813.html
Copyright © 2011-2022 走看看