跟踪阵列的最高占用指数

时间:2013-04-06 18:32:02

标签: arrays algorithm

我有一个数组,我经常(并且有效地随机)添加和删除元素。是否有一种算法来跟踪数组的最高占用索引?

现在我能想到的最好的是:

  1. 跟踪变量中最高的占用指数(即HOI)。
  2. 当获取数组中的下一个免费索引时,检查它是否高于HOI,如果它将该索引分配给HOI
  3. 当项目位于HOI索引时删除项目,然后从HOI向后扫描,直到找到占用索引并将其分配给HOI
  4. 这应该有效,但它不是特别优雅,所以我想知道是否有人知道更清洁的解决方案

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于阵列的密度。

对于一个至少中等密度的阵列,你的解决方案很好,因为下一个项目不会太远。

对于非常稀疏的数组,索引的二级数据结构可能是一个好主意(例如max heap)。

你坚持使用阵列吗?您应该始终考虑检查您选择的数据结构。从这里开始,很难说出什么是最好的,因为我对你要解决的问题知之甚少。

或者您可以考虑稍微复杂一点的解决方案:

  • 最高指数的最大值为5(左右)的集合(排序数组很小)。
  • 在插入时,只有当它大于最小元素时才添加到此集合中(如果它具有多于5个元素,则删除最小元素)。
  • 在删除时,从集合中删除(如果存在)。如果该集为空,则存储已删除的索引。
  • 一旦达到最高,只需返回集合中的最大值。如果集合为空,则从存储的索引向后移动以查找最大值(并将其添加到集合中)。