• SparseArray(稀疏数组)


    稀疏数组,作为压缩普通数组的一种方式
    import java.util.Arrays;
    
    /**
     *  1、原数组的行数,列数,非0数据个个数
     *  2、所有非0数据个坐标(row,column)
     */
    public class SparseArray {
    
        public static int[][] toSparseArray(int[][] array) {
            // 找到所有非0的数据个数
            int valueCount = 0;
            for (int i = 0 ;i < array.length; i ++) {
                for(int j = 0 ;j < array[i].length; j ++) {
                    int value = array[i][j];
                    if (value != 0) {
                        valueCount++;
                    }
                }
            }
    
            // 初始化稀疏素组第一行数据,记录原始数组的 row/column/valueCount
            int[][] sparseArray = new int[valueCount + 1][3];
            sparseArray[0][0] = array.length;
            sparseArray[0][1] = array[0].length;
            sparseArray[0][2] = valueCount;
    
            // 稀疏素组所有非0数据的坐标
            int index = 0;
            for (int i = 0 ;i < array.length; i ++) {
                for(int j = 0 ;j < array[i].length; j ++) {
                    int value = array[i][j];
                    if (value != 0) {
                        index++;
                        sparseArray[index][0] = i;
                        sparseArray[index][1] = j;
                        sparseArray[index][2] = value;
                    }
                }
            }
            return  sparseArray;
        }
    
        public static int[][] toArray(int[][] sparseArray) {
            //根据第一行数据,初始化原始数组的
            int[][] array = new int[sparseArray[0][0]][sparseArray[0][1]];
            // 赋值
            for (int i = 1 ; i < sparseArray.length; i ++) {
                int row = sparseArray[i][0];
                int column = sparseArray[i][1];
                int value = sparseArray[i][2];
                array[row][column] = value;
            }
            return  array;
        }
    
        public static void main(String[] args) {
            int originalArray[][] = new int [7][8];
            originalArray[0][1] = 8;
            originalArray[1][2] = 9;
            toString(originalArray);
    
            int[][] sparseArray = toSparseArray(originalArray);
            toString(sparseArray);
    
            int[][] array = toArray(sparseArray);
            toString(array);
        }
    
        private static void toString(int[][] array) {
            for (int i = 0 ;i < array.length; i ++) {
                System.out.println(Arrays.toString(array[i]));
            }
        }
    }
  • 相关阅读:
    MongoDB配置多个ConfigDB的问题(笔记)
    Python访问PostGIS(建表、空间索引、分区表)
    Python访问MySQL数据库
    Python访问MongoDB数据库
    Mapnik读取PostGIS数据渲染图片
    Python批量处理CSV文件
    Spring Mongo配置多个Mongos
    hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
    【Git】(1)---工作区、暂存区、版本库、远程仓库
    微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口
  • 原文地址:https://www.cnblogs.com/sleepingDogs/p/11140784.html
Copyright © 2020-2023  润新知