algorithm - 通过索引和元素删除快速查找的数据结构
问题描述
摘要:我有一段代码想要初始化一个数组,然后迭代地查找一个索引,获取值,然后删除该索引处的元素,将上面的所有值向下移动一个索引。使用普通数组执行此操作是 θ(n^2)。如果有比我想出的更好的方法,我想。
抽象数据类型需要支持: 用一开始就知道的所有数据进行初始化。查找索引的值。删除索引,通过将所有元素向左移动来填补空白。
我想出的数据结构:一棵完整的二叉树,在叶子和内部节点处具有“索引”,存储被填充的叶子数量。初始化非常简单,并且是 nlogn 索引是通过从根检查其子节点的计数并递归到正确的子节点来完成的。一旦你在一个叶子删除是通过清空数据然后回到树上,将所有计数减 1 logn。
使用 nlogn 初始化和 n 个已登录的索引/删除,整个运行时间为 nlogn。
解决方案
我在想也许我们可以使用带有双链表的哈希图
在初始化时,用给定的数组值作为键填充哈希图,并使用指向链表节点的指针(迭代器)作为哈希图的值,也填充双链表
尝试删除时,使用hashmap根据值找到指针,并删除链表中的节点
这样,初始化是 O(n),操作是 O(1)
推荐阅读
- permissions - 如何在 Hasura 中分离“插入”和“更新”的权限更新
- azure-data-factory - 使用 DataFactory 调用复杂的 REST 服务
- python - 从 UART 字符数组重建浮点值
- java - 为什么 Eclipse 尽管有错误仍然运行 JSP?
- vba - 我无法即时将新查询重新分配给我的报告 RecordSource
- r - 如何在R中使用dplyr在两个表上打印由两个变量分组的grouped_df
- python - Numpy在3D矩阵中逐行总和
- google-analytics-4 - 如何在 GA4 中制作每周电子邮件报告
- android - Android Volley 多维 JSON 请求发布方法
- unit-testing - 在开玩笑的测试覆盖率报告中显示“E”