Data structures 链表,在日志(k)中实现peekAt(k)方法

Data structures 链表,在日志(k)中实现peekAt(k)方法,data-structures,linked-list,time-complexity,Data Structures,Linked List,Time Complexity,我被要求设计一个数据结构,它将像一个堆栈一样工作,不受大小限制,在给定的运行时限制下,它将支持以下方法 push(s)-将s推送到数据结构-O(1) pop()-删除并返回插入的最后一个元素O(1) middle()-按插入顺序返回索引为n/2的元素(不删除),其中n是数据结构中当前元素的数量。-O(1) peekAt(k)-按插入顺序返回第k个元素(堆栈底部为k=1)-O(log(k)) 这3个方法将使用一个链表,但是我应该如何实现方法peek(k) 谢谢。您正在寻找的是的变体,它是按插入顺序

我被要求设计一个数据结构,它将像一个堆栈一样工作,不受大小限制,在给定的运行时限制下,它将支持以下方法

push(s)-将s推送到数据结构-O(1) pop()-删除并返回插入的最后一个元素O(1) middle()-按插入顺序返回索引为n/2的元素(不删除),其中n是数据结构中当前元素的数量。-O(1) peekAt(k)-按插入顺序返回第k个元素(堆栈底部为k=1)-O(log(k))

这3个方法将使用一个链表,但是我应该如何实现方法peek(k)


谢谢。

您正在寻找的是的变体,它是按插入顺序排序的

为了支持
O(logk)
而不是
O(logn)
,您实际需要的唯一修改是在启动搜索之前从下到上,例如:

// Assume head points to the first element in the lower tier list.
current = head
while (current->next->index < k) current = current->up

也就是说,O(log(k))检查。

如果你发布一些代码或你尝试过的东西会更好。这是否回答了你的问题?好的,谢谢。但是我如何保持O(1)的时间复杂度与其他方法相比?@ש