Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 跟踪阵列的最高占用索引_Arrays_Algorithm - Fatal编程技术网

Arrays 跟踪阵列的最高占用索引

Arrays 跟踪阵列的最高占用索引,arrays,algorithm,Arrays,Algorithm,我有一个数组,我经常(有效地随机)在其中添加和删除元素。是否有跟踪数组中最高占用索引的算法 现在我能想到的最好的办法是: 跟踪变量中最高占用索引(即HOI) 获取数组中的下一个可用索引时,请检查它是否高于HOI,如果是,请将该索引分配给HOI 删除项目时,如果该项目位于HOI索引,则从HOI向后扫描,直到找到占用的索引并将其分配给HOI 这应该可以,但它不是特别优雅,所以我想知道是否有人知道更清洁的解决方案,这在很大程度上取决于阵列的密度 对于至少中等密度的阵列,您的解决方案很好,因为下一项不会

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

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

  • 跟踪变量中最高占用索引(即HOI)
  • 获取数组中的下一个可用索引时,请检查它是否高于HOI,如果是,请将该索引分配给HOI
  • 删除项目时,如果该项目位于HOI索引,则从HOI向后扫描,直到找到占用的索引并将其分配给HOI

  • 这应该可以,但它不是特别优雅,所以我想知道是否有人知道更清洁的解决方案,这在很大程度上取决于阵列的密度

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

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

    您是否被阵列卡住了?你应该总是考虑复习你选择的数据结构。从这里开始,很难判断什么是最好的,因为我对你试图解决的问题了解得不够

    或您可以考虑<强>您的解决方案稍微复杂的版本:< /强>

    • 有一个最高索引的最大值为5(左右)的集合(排序数组很小就可以了)
    • 在插入时,仅当其大于最小元素时,才将其添加到此集合中(如果最小元素包含5个以上的元素,则将其删除)
    • 在删除时,从集合中删除(如果存在)。如果集合为空,则存储删除的索引
    • 在获取最高值时,只需返回集合中的最大值。如果集合为空,则从存储的索引向后查找最大值(并将其添加到集合中)

    阵列可以有多大?为什么这样不好?这似乎是一个很好的解决方案(不需要说明具体的语言)。虽然您可能可以在大多数语言中使用库数据结构。@dtech:这并不可怕,只是似乎比我聪明得多的人已经知道如何在恒定时间内完成;)哦,现在我正在用C++@nhahtdh编写:实际上,它将是~1000个元素,更糟糕的是,它可能会大到2个^16@Huhwha:我认为解决方案很好,只要删除时数组中有合理数量的条目(更多条目意味着您不必通过过多条目来查找最高索引的可能性更高)。请注意集合中的项目数(此处为5)应基于您随后执行的最大删除次数。如果您交替删除/添加,则可以使用2个。如果您可以在添加另一个项目之前删除50%的项目,则这可能不是一个好的解决方案。