恒定时间删除第ith个元素

时间:2018-10-03 04:47:48

标签: java performance data-structures complexity-theory

我正在寻找Java中具有以下属性的数据结构:

  1. O(1)时间内使用结构内的索引进行删除,同时保持元素的相对顺序(最初排序)。
  2. 添加,仅在结构的末尾。
  3. 不需要更新。
  4. 所有删除后单次遍历。

我尝试过的选项

  • 阵列:由于需要进行移位,因此无法在O(1)时间内删除。另外,如果我使用HashSet个已删除(或未删除)的元素,那么在遍历数组时,我也必须经历一次已删除的元素。
  • 链接列表:删除为O(1)(如果您引用了要删除的Node,并且最好是双链表),则移位为不必要。但是没有索引,因此我必须从头开始遍历,以确定必须删除的Node
  • TreeSet:树集可以保持顺序,删除是O(1)时间,但需要通过元素,但不能通过结构内部的索引。

我正在寻找一种数据结构,该数据结构可以在Java中帮助我完成上述任务。如果它不是内置的,那么我想知道所述数据结构的实现。


需要: 我正在尝试解决this问题。首先给出一串英文字符,然后对该字符串执行许多操作。每个操作旁边都有一个字符c和一个数字n,这意味着我们必须删除第n个字符c的出现。

我的解决方案: 我将创建一个X类型的数组(我正在寻找的数据结构),长度为26(每个字符)。我会在字符串的第三个位置(从d开始)中的每个包含0的对象中添加一个字符,例如index。我将对字符串的所有字符执行此操作。如果字符串的长度为O(n),则总共要花费n

完成后,我将开始处理查询。每个查询都要求我们删除第n个字符c(可变,而不是实际的英语字符c)的第O(1)个出现的情况,我们可以在O(q)时间(根据需要)中进行此操作。因此,每个此类删除操作都将花费q时间,其中charArray是查询数。

然后,我们可以制作一个X,其长度与原始字符串的长度相同。然后遍历charArray类型的对象数组每个插槽中剩余的所有元素,并将它们放在各自的位置。完成此操作后,我们可以再次遍历此var jArray = new JArray { new JObject { new JProperty("Property1", new JObject { new JProperty("Property1_1", "SomeValue"), new JProperty("Property1_2", "SomeValue"), } ), new JProperty("Property2", "SomeValue"), } }; 并忽略所有空白处,并从剩下的元素中构造一个字符串。

0 个答案:

没有答案