zoukankan      html  css  js  c++  java
  • 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]));
            }
        }
    }
  • 相关阅读:
    TCP/IP协议学习-1.概述
    Gitlab与Sonarqube整合-代码提交自动检测
    Kubernetes-4.Pods
    Kubernetes-3.安装
    Kubernetes-2.组件
    Kubernetes-1.概述
    第200题 数列极限积分
    English
    亮总语录
    RadioButton Control
  • 原文地址:https://www.cnblogs.com/sleepingDogs/p/11140784.html
Copyright © 2011-2022 走看看