我正在寻找Java中具有以下属性的数据结构:
O(1)
时间内使用结构内的索引进行删除,同时保持元素的相对顺序(最初排序)。我尝试过的选项:
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"),
}
};
并忽略所有空白处,并从剩下的元素中构造一个字符串。