首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将数组按级别聚合为嵌套数组?

将数组按级别聚合为嵌套数组可以通过递归算法来实现。以下是一个基本的算法步骤:

  1. 创建一个空的结果数组(nestedArray)和一个空的哈希表(hashMap)。
  2. 遍历输入的数组(inputArray)。
  3. 对于每个数组元素,将其值作为键,将其作为值存储到哈希表中。如果哈希表中不存在该键,则将该键和一个空数组作为值存储到哈希表中。
  4. 遍历输入的数组(inputArray)。
  5. 对于每个数组元素,获取其父级值(parentValue)。
  6. 如果父级值存在于哈希表中,则将该数组元素添加到对应的值(子数组)中。
  7. 如果父级值不存在于哈希表中,则将该数组元素作为顶级元素,添加到结果数组(nestedArray)中。
  8. 返回结果数组(nestedArray)。

这样就可以将数组按级别聚合为嵌套数组。

下面是一个示例代码(使用JavaScript):

代码语言:txt
复制
function groupByLevel(inputArray) {
  const nestedArray = [];
  const hashMap = {};

  // 遍历数组,将数组元素作为键,空数组作为值存储到哈希表
  for (let i = 0; i < inputArray.length; i++) {
    const value = inputArray[i];
    if (!hashMap[value]) {
      hashMap[value] = [];
    }
  }

  // 遍历数组,按级别聚合为嵌套数组
  for (let i = 0; i < inputArray.length; i++) {
    const value = inputArray[i];
    const parentValue = inputArray[i - 1];

    if (hashMap[parentValue]) {
      hashMap[parentValue].push(value);
    } else {
      nestedArray.push(value);
    }
  }

  return nestedArray;
}

// 示例用法
const inputArray = [1, 1, 2, 2, 3, 3, 2, 2, 1];
const result = groupByLevel(inputArray);
console.log(result);

上述代码将输入数组 [1, 1, 2, 2, 3, 3, 2, 2, 1] 按级别聚合为嵌套数组,输出结果为 [1, [1, [2, [2, [3, [3, 2, 2], 2], 1]]]]

注意:该算法假设输入的数组元素是有序的,并且每个元素都有一个父级值。如果输入的数组不满足这些条件,可能需要对算法进行适当修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

适用于 VS 2022 .NET 6.0(版本 3.1.0)的二维码编码器和解码器 C# 类库

编码解决方案 QRCodeEncoderLibrary: 类库项目 QRCodeEncoderDemo: 一个 Windows 窗体演示程序,演示如何将一个字符串或一个字节数组编码为二维码图像文件 QRCodeConsoleDemo...选择纠错级别。 设置 ECI 分配值或留空。 在数据框中输入文本。您可以使用竖线|字符将其分成string数字、字母数字和一般文本段。 按Encode按钮,将显示二维码。...按Save Image按钮或Copy to Clipbord按钮。 如果您按下“Copy to Clipbord”,模块宽度为 2 和静区为 8 的 二维码图像将被加载到剪贴板。...按Save Compressed PNG以不使用位图的 PNG 格式保存图像。 或者,按下Bitmap Image。 或者,按下Save Special。将显示保存特殊屏幕。...Decoder.GetChars(DataArray, 0, DataArray.Length, CharArray, 0); return new string(CharArray); } 例如,下图有两个二维码,一个嵌套在另外一种

1.9K20

如何使用 JavaScript 对数值数组进行排序?

在本文中,我们将学习在 JavaScript 中对数值数组进行排序的方法。数组的排序意味着以特定顺序排列数组的元素,即它们可以按升序或递增顺序排列,也可以按降序或递减顺序排列。...在 JavaScript 中,有两种方法可以按特定顺序对数值数组进行排序 通过在循环的帮助下遍历数组通过使用 JavaScript 中提供的 sort() 方法让我们详细讨论上述两种方法,并对数值数组进行排序...通过在循环的帮助下遍历数组这是按特定顺序对数组进行排序的最朴素、最简单和最简单的方法。我们甚至可以使用这种方法对任何语言的数字数组进行排序。...例下面的示例将解释如何借助两个嵌套循环按升序对数值数组进行排序 如何将 sort() 方法与数组一起使用来对其进行排序 array_name.sort( comparator_function ); 让我们通过在 JavaScript 代码示例中实现它来实际理解它

19810
  • PLSQL 集合的初始化与赋值

    尤其是嵌套表与变长数组,在赋值之前必须先初始化。当嵌套表和变长数 组在声明时,它们都会自动地被设置成NULL值。也就是嵌套表和变长数组中集合不存在任何元素,并不是针对它所拥有的元素。...我们必须显式地调用构造函数为每一个变长数组和嵌套表变量进行初始化操作(对于关联数组来说, 是不需要使用构造函数进行初始化的)。         ...有关集合类型的描述请参考: PL/SQL 联合数组与嵌套表 PL/SQL 变长数组 PL/SQL --> PL/SQL记录 一、联合数组的赋值     联合数组的不需要初始化,直接赋值即可。...而联合数组不需要初始化而直接进行赋值。 2、在声明嵌套表与变长数组时,这些集合类型会被自动置为NULL,即集合不存在任何元素。而不是集合中的元素为NULL。...10、注意理解复合类型之间(嵌套表和变长数组中嵌有PL/SQL记录)的变量元素间的传递以及集合方法BULK COLLECT INTO,LAST,EXTEND等。

    2.3K50

    关于数组的前端面试题,你是否都能答对?

    总结面试题不一定是为了准备面试,更是对于自己的一种温故知新,了解自己知识的熟练度和理解度 问题一览 如何判断一个变量是否为数组 数组的原生方法有哪些? 如何将一个类数组变量转化为数组?...如何“打平”一个嵌套数组,如[1,[2,[3]],4,[5]] => [1,2,3,4,5]?你能说出多少种方法? 如何克隆一个数组?你能说出多少种?...lastIndexOf 遍历方法: forEach、entries、every、some、filter、find、findIndex、keys、map、reduce、reduceRight、values 如何将类数组的变量转化为数组...很多人都不知道,其实Array.prototype是一个数组,只不过length为0 如何“打平”一个嵌套数组,如[1,[2,[3]],4,[5]] => [1,2,3,4,5]?...如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

    1.3K30

    4.4 C++ Boost 数据集序列化库

    在实际开发中,我们经常需要进行数组的序列化操作,以便在需要时可以恢复出该数组的数据。Boost库中提供了一组非常方便的序列化工具,可以轻松地将数组从内存中打包创建成字符串,反序列化则是反之。...在本节中,我们将重点介绍Boost库中针对数组的序列化相关概念和用法,包括如何使用Boost.Serialization进行数组序列化和反序列化操作、如何定义自定义数组序列化函数、如何处理多维数组以及如何进行特定数据类型的序列化等...在本节中,我们将重点介绍Boost库中针对嵌套结构体的序列化相关概念和用法,包括如何使用Boost.Serialization进行嵌套结构体序列化和反序列化操作、如何定义自定义嵌套结构体序列化函数、如何处理结构体中的指针等...在本节中,我们将重点介绍如何将序列化的数组转换为字符串,包括如何将二进制流进行编码、如何进行限长编码以及如何使用Boost.Serialization中的相关类进行编码操作等。...在本节中,我们将重点介绍如何将序列化的嵌套结构数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等

    48941

    4.4 C++ Boost 数据集序列化库

    针对数组的序列化是一种将数组数据结构进行持久化和传输的序列化技术,它可以将数组中的数据转化为二进制流,使得其可以被传输和存储。...在本节中,我们将重点介绍Boost库中针对数组的序列化相关概念和用法,包括如何使用Boost.Serialization进行数组序列化和反序列化操作、如何定义自定义数组序列化函数、如何处理多维数组以及如何进行特定数据类型的序列化等...在本节中,我们将重点介绍Boost库中针对嵌套结构体的序列化相关概念和用法,包括如何使用Boost.Serialization进行嵌套结构体序列化和反序列化操作、如何定义自定义嵌套结构体序列化函数、如何处理结构体中的指针等...在本节中,我们将重点介绍如何将序列化的数组转换为字符串,包括如何将二进制流进行编码、如何进行限长编码以及如何使用Boost.Serialization中的相关类进行编码操作等。...在本节中,我们将重点介绍如何将序列化的嵌套结构数据转换为字符串,包括如何将二进制流进行编码、如何进行限长编码、基于文本的序列化操作以及如何使用Boost.Serialization中的相关类进行编码操作等

    36851

    Shopee 面试体验拉满!

    按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。...按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。 按「字段个数」分类:单列索引、联合索引。...B+Tree 是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,而且每个节点里的数据是按主键顺序存放的。...而且记录锁是有 S 锁和 X 锁之分的,满足读写互斥,写写互斥 间隙锁,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象。...创建新的数组:根据计算得到的新容量,创建一个新的更大的数组。 将元素复制:将原来数组中的元素逐个复制到新数组中。 更新引用:将ArrayList内部指向原数组的引用指向新数组。

    21110

    【书摘】SUMIF条件聚合:将行级别筛选和聚合分析合二为一

    第八章 8.7.3 SUMIF条件聚合:将行级别筛选和聚合分析合二为一 在本书6.1.1节,笔者介绍了“独立筛选”和“条件计算筛选”两个筛选情景,后者的典型是SUM+IF函数。...从计算的角度,SUMIF表达式是建立在数据表行级别计算基础上的聚合计算。...当然,受Excel中SUMIF函数的影响,很多初学者会把筛选嵌套在聚合计算中。借用 SQL的逻辑表达,如下所示。...2.必要时,将筛选条件与聚合组合为“条件聚合表达式” 问题2的特殊之处在于,两个利润分别对应不同的日期筛选范围。例如,领导指定要完成如图8-51右侧所示的靶心图样式。...图8-51 基于2020年和2021年独立的利润字段完成自定义配置 “条件聚合”,顾名思义,就是在聚合值中直接包含判断条件,可以使用IF函数和聚合函数组合为表达式来完成。

    9910

    70个NumPy练习:在Python下一举搞定机器学习矩阵运算

    翻译 | 王柯凝 责编 | suisui 【导读】Numpy是一个开源的Python科学计算库,专用于存储和处理大型矩阵,相比Python自身的嵌套列表结构要高效很多,是数据分析、统计机器学习的必备工具...输入: 输出: 答案: 15.如何将处理标量的python函数在numpy数组上运行? 难度:2 问题:将处理两个标量函数maxx在两个数组上运行。...输入: 答案: 27.如何将一维元组数组转换为二维numpy数组? 难度:2 问题:通过省略species文本字段将一维iris数组转换为二维数组iris_2d。...43.用另一个数组分组时,如何获得数组中第二大的元素值? 难度:2 问题:第二长的物种的最大价值是什么? 答案: 44.如何按列排序二维数组?...输入: 输出: 答案: 52.如何创建按分类变量分组的行号? 难度:3 问题:创建由分类变量分组的行号。使用iris的species中的样品作为输入。

    20.7K42

    优质牛肋骨

    从小到大依次枚举所有的数显然不现实,因此考虑按位枚举。 枚举从最高位开始,之后枚举每一位的数,直到达到指定位数为止。...举例说明对于 7331 的枚举过程: 第一位为 7,是质数,枚举下一位; 第二位为 3,和高位数组合为 73 是质数,枚举下一位; 第三位为 3,和高位数组合为 733 是质数,枚举下一位; 第四位为...1,和高位数组合为 7331 是质数,达到了位数条件即为所求。...因此,递归的每一层,枚举剩余位从 0 开始枚举到 9 与高位数组合判断。 若组合数为质数,则递归到下一层,否则跳过。 最终满足的组合数直接输出即可。...return ; } for(int i = 0; i < 5; i ++){ if(is_prime(sum(u, add[i]))){ // 满足和高位数组合为质数

    96520

    《机器学习实战》(十)——k-means、k-means++、二分K-means

    该算法的描述是如下: 1.从输入的数据点集合中随机选择一个点作为第一个聚类中心 2.对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x) 3.选择一个新的数据点作为新的聚类中心...,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下: 1.先从我们的数据库随机挑个随机点当“种子点” 2.对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里...i)[0],:] clusterAssment 存储的(所属的中心编号,距中心的距离)的列表,clusterAssment[:,0].A就是把clusterAssment各个所属的中心编号抽出来形成数组...clusterAssment[:,0].A == i就形成的布尔数组,如果编号等于i,则为true,反之为false。...nonzero(clusterAssment[:,0].A == i),会得到非零或者非false的索引列表,列表中第一个元素是按行的索引,第二个元素是按列的索引。

    1K50

    阿里二面凉了,难蹦。。。

    按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。...按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。 按「字段个数」分类:单列索引、联合索引。...聚簇索引数据结构 聚簇索引数据结构是B+树,B+Tree 是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,而且每个节点里的数据是按主键顺序存放的。...,MySQL InnoDB 引擎的默认隔离级别; 串行化;会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行; 按隔离水平高低排序如下...: 针对不同的隔离级别,并发事务时可能发生的现象也会不同。

    15310

    Python中的循环-比较和性能

    问题陈述 我们将尝试按元素求和两个序列。换句话说,我们将采用两个大小相同的序列(列表或数组),并使用通过从输入中添加相应元素而获得的元素来创建第三个序列。...特别适合操纵数组。它提供了许多有用的例程来处理数组,但也允许编写紧凑而优雅的代码而没有循环。 实际上,循环以及其他对性能至关重要的操作是在numpy较低级别上实现的。...) 按numpy元素求和两个数组x_和y_就像x_ + y_一样容易。...嵌套循环 现在让我们比较嵌套的Python循环。 使用纯Python 我们将再次处理两个名为x和y的列表。它们每个都将包含100个内部列表,其中包含1.000个伪随机整数元素。...结论 本文比较了按元素添加两个列表或数组时Python循环的性能。结果表明,列表理解比普通的for循环要快,而while循环则要快。在所有这三种情况下,简单循环都比嵌套循环快一点。

    3.4K20

    MongoDB实战面试指南:常见问题一网打尽

    MongoDB使用分片键来确定如何将文档分配给特定的分片。当执行查询时,MongoDB会根据分片键将查询路由到相应的分片上。 6. 问题:在MongoDB中如何处理事务?...例如,我们可以使用 group阶段按类别对销售数据进行分组,并计算每个类别的总销售额。...答案:MongoDB中的elemMatch操作符用于在嵌套数组字段中查询满足多个条件的元素。当数组字段中的元素是文档时, elemMatch允许我们指定多个查询条件,并只返回满足所有条件的数组元素。...例如,如果我们有一个包含嵌套文档的数组字段items,每个文档都有price和quantity字段,我们可以使用以下查询语句来查找价格大于10且数量小于5的项:db.collection.find({...MongoDB还支持嵌套文档和数组字段,允许存储复杂的数据结构。此外,MongoDB还支持地理空间数据、二进制数据和正则表达式等特殊数据类型。 23.

    94010

    漫谈 LevelDB 数据结构(二):布隆过滤器(Bloom Filter)

    数据结构 Bloom Filter 底层使用一个位数组(bit array),初始,所表示集合为空时,所有位都为 0: 当往集合中插入一个元素 x 时,利用 k 个独立的哈希函数分别对 x 进行散列,...然后将 k 个散列值按数组长度取余后分别将数组中对应位置置为 1: 查找过程和插入过程类似,也是利用同样的 k 个哈希函数对待查找元素按顺序进行哈希,得到 k 个位置。...源码 铺垫了 Bloom Filter 背景和基本原理后,让我们来看看 LevelDB 源码是如何将其嵌入系统的。...若调用 CreateFilter 时传入的集合为 keys,则如果 key 在 keys 中,则必须返回 true。...C++ 语言中,LevelDB 使用 char 数组来表示。

    1.3K20

    解惑3:时间频度,算法时间复杂度

    又根据时间频度T(n)的“三个忽略”原则,我们可以知道时间复杂度是这样得到的: 忽略所有常数 只保留函数中的最高阶项 去掉最高阶项的系数 举个例子: 某算法T(n)=2n^3+4n-5,按步骤走: T(...平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示 均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上...基本上均摊结果就等于低级别复杂度。...if(arr[i] == k){ //找到了 } } } 上面这个方法,最好的情况下元素k就在数组第一位,复杂度为O(1),但是最坏的情况下,元素k在数组最后一位...六、总结 总结一下如何快速判断程序的时间复杂度: 只关注循环最多的那部分代码 总复杂度等于量级最大的那段代码的复杂度 嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 发布者:全栈程序员栈长,转载请注明出处

    80120

    搜索旋转排序数组(leetcode 33)

    1.问题描述 整数数组按升序排列,数组中的值互不相同 。 假设数组在预先未知的某个点上进行了旋转。 如数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2]。...搜索一个给定的目标值,如果数组中存在目标值,则返回它的索引,否则返回 -1 。 算法时间复杂度必须是 O(logn) 级别。...可以看到,旋转就是将一个有序数组从某两个元素的中间切了一刀,形成了两个有序子数组,然后将第一个有序子数组放到了第二个有序子数组之后。 那么应该如何将这一特性与二分查找结合呢?...这道题中,数组本身不是有序的,进行旋转后只保证了数组的局部是有序的,这还能进行二分查找吗?答案是可以的。 将旋转排序数组均分,一定有一部分的数组是有序的。...复杂度分析 时间复杂度:O(logn),其中 n 为 nums 数组的长度。整个算法时间复杂度即为二分查找的时间复杂度。 空间复杂度:O(1)。我们只需要常数级别的空间存放变量。

    18220

    js深拷贝和浅拷贝具体使用区别_es6深拷贝和浅拷贝

    基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。 引用类型的值是保存在内存中的对象。...JS的基本类型不存在浅拷贝还是深拷贝的问题,主要是针对于引用类型 【4】浅拷贝和深拷贝区别总结 字面意思: 浅拷贝—拷贝的级别浅。 深拷贝—拷贝级别更深。...具体: 浅拷贝—浅拷贝是指复制对象的时候,只对第一层键值对进行独立的复制,如果对象内还有对象,则只能复制嵌套对象的地址 深拷贝—深拷贝是指复制对象的时候完全的拷贝一份对象,即使嵌套了对象,两者也相互分离...(var key in obj1) { obj2[key] = obj1[key] } } 但上面代码只能实现一层的拷贝,无法进行深层次的拷贝,封装函数再次通过对象数组嵌套测试如下...,无法进行深层次的拷贝,当改变obj2嵌套对象c的值后,obj1嵌套对象c的值也跟着变了 这个时候我们可以使用深拷贝来完成,所谓深拷贝,就是能够实现真正意义上的数组和对象的拷贝,我们通过递归调用浅拷贝的方式实现

    65620

    回文数判定算法的深入研究(JavaScript)

    JS中数组提供了reverse方法以返回一个倒序的数组,那么不难想到,字符串的倒置应该依靠数组实现。首先使用split方法将字符串分割为数组,倒置,再使用join将其拼合为字符串。...=> "dcba" 用链式写法让代码看起来优美一些: "abcd".split("").reverse().join(""); // => "dcba" 那么,现在有一个参数x储存了需要判断的回文数,如何将这个...return `${x}` === `${x}`.split("").reverse().join(""); } 二[1]、继续深入 使用第一种方法效率不是很高,一是因为数据类型的转换消耗性能,二是因为JS的数组效率本身就不是很高...最后1位),并将 tmp 整除10(去掉最后1位),即可完成数值的倒置,对数值 123454321 进行100万次判定耗时169±5ms,其实作为第一次的尝试结果我还是很满意的,若吹毛求疵一点,可以使用按位非操作符

    52720
    领券