2014-10-29 202 views
0

假设堆栈中有50000+个整数项?如何有效地找出它的最大值或最小值? 堆栈可以增长或减少pop()和push(),但是我们需要跟踪堆栈中的最大值和最小值?查找堆栈中的最大值和最小值

+0

什么是编程语言?如何用数组或链表实现堆栈? – 2014-10-29 09:01:33

+0

你是否需要实现这种堆栈?你有一个堆栈,并希望找到最小和最大?对操作有没有O(?)限制?你有一些代码可以分享吗? – yossico 2014-10-29 10:53:57

+0

[Stack with find-min/find-max更有效率比O(n)?](http://stackoverflow.com/questions/7134129/stack-with-find-min-find-max-more-高效超上) – 2014-10-29 12:40:53

回答

0

我唯一的想法是继承堆栈并保持最大值和最小值。在弹出和推动做你的最大和最小的变化。

1

正如Mischel指出的,Stack with find-min/find-max more efficient than O(n)?已经回答了这个问题。

但是,这种回应表明,您需要在堆栈中的每个点上存储每个最大值和最小值。更好的解决方案是为最大值和最小值分别设置一个堆栈。对于最大堆栈,只有当新元素大于当前最大值时,才会将新元素推入最大堆栈,反之亦然。当您弹出主堆栈的元素等于它们并且不等于主堆栈中的下一个元素时,您将弹出最小和最大堆栈的元素。

请注意,这需要O(n)额外的空间,同时提供O(1)操作。