Data structures 链表,在日志(k)中实现peekAt(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)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) 谢谢。您正在寻找的是的变体,它是按插入顺序
谢谢。您正在寻找的是的变体,它是按插入顺序排序的 为了支持
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)的时间复杂度与其他方法相比?@ש