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;
            }
    
  • 相关阅读:
    JavaScript设计模式
    《现代操作系统(中文第三版)》课后习题——第一章 绪论
    hadoop基础----hadoop理论(四)-----hadoop分布式并行计算模型MapReduce具体解释
    linux 改动rootpassword以及忘记rootpassword
    Android画图之抗锯齿 paint 和 Canvas 两种方式
    Rect参数的简易理解方式
    关于新建android项目时 appcompat_v7报错问题的一点总结
    关于seo优化的核心思想
    关于 android 读取当前手机号码
    关于 android 返回键 代码实现
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13284311.html
Copyright © 2011-2022 走看看