zoukankan      html  css  js  c++  java
  • 数据结构和算法-稀疏数组

    稀疏数组:

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

    稀疏数组的处理方法:

    记录一个数组有多少个不同的值,把具有不同值的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模

    使用场景

    序列化大部分元素值相同的数组,可以节省存储空间

    客户端

    public static void Main(string[] args)
            {
                //原始数组
                int[] qipanArr = new int[] {
                1, 0, 1, 1, 1, 2, 0, 0,
                0, 3, 3, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0};
    
    
                //一维数组转换为稀疏数组
                var sparseArray = ArrayToSparseArray(qipanArr);
                //稀疏数组转为一维数组
                var newArr = SparseArrayToArray(sparseArray);
            }
    

    实现

            /// <summary>
            /// 一维数组转换为稀疏数组
            /// </summary>
            /// <param name="oriArray"></param>
            /// <returns></returns>
            public static int[][] ArrayToSparseArray(int[] oriArray)
            {
                //数组转稀疏数组
                //获取有值元素个数
                int arrayCount = oriArray.Length;
                int valueCount = 0;
                for (int i = 0; i < oriArray.Length; i++)
                {
                    if (oriArray[i] != 0)
                    {
                        valueCount++;
                    }
                }
                int[][] sparseArray = new int[valueCount + 1][];
                //第一行:第一列代表原始数组总数、第二列代表原始数组有值元素的数量
                sparseArray[0] = new int[1];
                sparseArray[0][0] = arrayCount;
                int index = 1;
                for (int i = 0; i < oriArray.Length; i++)
                {
                    int value = oriArray[i];
                    if (value != 0)
                    {//将数组中非0数据放入稀疏数组
                        sparseArray[index] = new int[2];
                        sparseArray[index][0] = i;
                        sparseArray[index][1] = value;
                        index++;
                    }
                }
                return sparseArray;
            }
            /// <summary>
            /// 稀疏数组转为一维数组
            /// </summary>
            /// <param name="sparseArray"></param>
            /// <returns></returns>
            public static int[] SparseArrayToArray(int[][] sparseArray)
            {
                int[] newArr = new int[sparseArray[0][0]];
                for (int i = 1; i < sparseArray.Length; i++)
                {
                    newArr[sparseArray[i][0]] = sparseArray[i][1];
                }
                return newArr;
            }
    
  • 相关阅读:
    DevExpress XtraReport报表预览时可编辑的功能
    vim编辑器的常用命令
    git 的一些常用命令
    ASP.NET MVC过滤器粗略总结
    违法占耕辅助处理软件
    三调管理信息系统
    java学习随笔源码day01
    Java学习笔记Day01-004之static关键字
    人事工资信息管理系统(核心代码实现、操作视频)
    人事工资信息管理系统之数据库设计
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13284311.html
Copyright © 2011-2022 走看看