查找堆栈中的最大值和最小值
Posted
技术标签:
【中文标题】查找堆栈中的最大值和最小值【英文标题】:Find the maximum and a minimum in a stack 【发布时间】:2014-12-24 21:43:56 【问题描述】:假设堆栈中有 50000+ 个整数条目?如何有效地找出其中的最大值或最小值? 栈可以增长或减少,即pop()和push(),但是我们需要跟踪栈中的最大值和最小值吗?
【问题讨论】:
编程语言是什么?栈是如何实现的,用数组还是链表? 你需要实现这种堆栈吗?你有堆栈并想找到最小值和最大值吗?您对操作有任何 O(?) 限制吗?你有一些代码要分享吗? Stack with find-min/find-max more efficient than O(n)? 的可能重复项 【参考方案1】:我唯一的想法是继承 Stack 并保持在 max 和 min 内。在 pop 和 push 时对你的最大值和最小值进行更改。
【讨论】:
【参考方案2】:正如 Mischel 指出的那样,Stack with find-min/find-max more efficient than O(n)? 已经回答了这个问题。
但是,该响应表明您需要在堆栈中的每个点存储每个最大值和最小值。更好的解决方案是为最大值和最小值设置一个单独的堆栈。对于最大堆栈,只有当新元素大于当前最大值时,您才会将新元素推入最大堆栈,反之亦然。当您从主堆栈中弹出的元素等于它们并且不等于主堆栈中的下一个元素时,您将弹出最小和最大堆栈的元素。
请注意,这需要 O(n) 额外空间,同时提供 O(1) 操作。
【讨论】:
以上是关于查找堆栈中的最大值和最小值的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:使用 reduce() 查找最小值和最大值?