【发布时间】:2013-12-08 08:18:35
【问题描述】:
如何在 O(1) 复杂度的堆栈中找到最小值。要找到堆栈的最小值,我找到了两种方法: 1) min = 栈顶值 遍历栈并更新最小值,得到栈的最小值。 这需要 O(N) 复杂度,其中 N 是堆栈中的元素数
2) 将堆栈元素放入 minheap 将提取的根值将是堆栈中的最小值 这需要 O(N log(N))
但是我如何实现 O(1) 算法,一种独立于输入大小的算法。
这里假设堆栈已经加载了元素
【问题讨论】:
如何在 O(1) 复杂度的堆栈中找到最小值。要找到堆栈的最小值,我找到了两种方法: 1) min = 栈顶值 遍历栈并更新最小值,得到栈的最小值。 这需要 O(N) 复杂度,其中 N 是堆栈中的元素数
2) 将堆栈元素放入 minheap 将提取的根值将是堆栈中的最小值 这需要 O(N log(N))
但是我如何实现 O(1) 算法,一种独立于输入大小的算法。
这里假设堆栈已经加载了元素
【问题讨论】:
你不能。找到任意堆栈的最小元素的 O(1) 算法也可用于找到双向链表的最小元素,然后您可以使用它来创建 O(n) 排序算法。
现在,可以实现一个堆栈来跟踪其最小元素的构建。然后这样的堆栈可以返回其存储的最小值,并且如果您碰巧弹出最小元素,则只需进行 O(n) 搜索。但这并不是一回事。
【讨论】: