设计包含0(1)中最近元素的常数操作的DS



设计一个数据结构,支持对相似元素(不重复元素)的集合进行以下操作:

/在集合中添加元素e/

void add(Element e);

/从集合中删除元素e,假设e存在于集合/

void delete(Element e);

/如果元素存在于集合中,则返回true;否则返回false/

boolean contains(Element e);

/返回集合中存在的最近添加的元素,假设集合至少有一个元素。/

e getMostRecent()

所有操作必须是O(1)。我在想哈希映射和数组。但是如何维护最新的元素呢?

您可以为每个查询使用平摊时间O(1)实现这样的结构。

因此,您可以为最后一种类型的查询存储额外的堆栈- getMostRecent()

当你需要add元素时-只需将它添加到hasmap(如你所说)并将其推到我们额外的堆栈顶部。

当您需要delete元素时-不做任何额外的堆栈。

当你需要find the recent element -只是弹出元素从我们的堆栈,而它不存在于hashmap。当你找到现有的元素时——它是最近的。

因此,如果我们进行D delete查询,A add查询和Q - 'getMostRecent'查询,我们的结构需要的时间是O(D + A + Q),因为如果我们向堆栈中添加元素,我们只能删除它一次。

LinkedHashMap (in java.util) -一个哈希表(支持插入,删除,在恒定时间内存在)与一个保持插入顺序的链表(支持在恒定时间内使用迭代器getLast)。

最新更新