【发布时间】:2016-04-14 23:58:29
【问题描述】:
给定一个连续的整数流和两个堆栈。我想实现以 O(1) 复杂度运行的 extractMin 操作。此操作从记录中弹出最小元素并将其返回。基本解决方案是使用 2 个堆栈以反向排序顺序保持数据。这样我们就可以简单地弹出包含数据的栈顶元素。但是有了这个,每个整数的插入都是 O(N) 。我能否在插入中获得更好的复杂性,保持 extractMin 操作为 O(1)。
添加示例以使其更清晰:
10,-20,2,-3,-5,10,20(随时为整数流)。
extractMin() // returns -20
extractMin() // returns -5
【问题讨论】:
-
可以push一个数组,然后按排序顺序弹出,这样排序下界就生效了。
-
您的问题是,是否可以使用两个堆栈,或者是否可以使用任何合适的数据结构?
-
另外,您希望混合插入和弹出,还是先插入所有内容,然后开始弹出?
-
这是在一次采访中被问到的。不确定是否不可能。
-
@hyde 混合插入和弹出
标签: c++ algorithm stack time-complexity