在O(1)时间复杂度的堆栈中查找最小值

时间:2013-11-23 11:59:15

标签: c algorithm

如何在O(1)复杂度的堆栈中找到最小值。为了找到堆栈的最小值,我发现了两种方法: 1)min =堆栈的最高值 遍历堆栈并更新最小值以获取堆栈的最小值。 这需要O(N)复杂度,其中N是堆栈中元素的数量

2)将堆叠元素放在minheap中 将提取的根值将是堆栈中的最小值 这需要O(N log(N))

但是如何实现O(1)算法,这是一种独立于输入大小的算法。

这里的假设是堆栈已经加载了元素

1 个答案:

答案 0 :(得分:3)

你做不到。找到任意堆栈的最小元素的O(1)算法也可用于查找双向链表的最小元素,然后可以使用该算法创建O(n)排序算法。

现在,可以实现一个堆栈,该堆栈在构建时跟踪其最小元素。这样的堆栈然后可以返回其存储的最小值,并且如果碰巧弹出最小元素,则只需要进行O(n)搜索。但那并不是一回事。