【发布时间】:2012-08-21 19:39:25
【问题描述】:
这是一个非常常见的问题,但我在任何地方都没有找到明确的答案。 我正在做的是使用 2 stacks 实现 Queue ,并且在节点中连同 data ,我也维护 min 和 max 值。实现是用Java完成的。
现在,问题是如果 first element is Max / Min 和我将它出队,那么其余节点包含最小/最大值作为出队的那个。
示例:10 7 8 9 2
节点 - [数据,最大值,最小值]
[10,10,10] , [7,10,7] ,[8,10,7] , [9,10,7] , [2,10,2]
现在,如果我将其出队,则队列为:[7,10,7] ,[8,10,7] , [9,10,7] , [2,10,2]
并且最小值和最大值是错误的 (10,7) ,应该是 (9,2)。
我的算法基本上适用于堆栈,我正在使用队列。那么如何修改我的算法以得到正确的结果呢?
【问题讨论】:
-
如果这是一个优先队列——并且你想跟踪最大元素——那么你将不会使用堆栈到达任何地方。优先级队列的实现与队列完全不同。
-
“这是一个非常常见的问题......我正在做的是使用 2 个堆栈实现队列”你已经问过很多次了,但我从来没有听到有人问过这个问题,主要是因为它没有没有任何意义,除非作为面试问题。你能说你为什么要这样做吗?你想解决什么问题。
-
@LouisWasserman 从技术上讲,优先级队列为您提供下一个最低元素。例如如果按时间排序,则希望出现下一个节点。
-
既然可以用一个Queue作为队列,为什么还要用两个栈来实现一个队列?
-
你能说一下它是做什么用的吗?你想解决什么现实世界的问题?你能提供其他人讨论过这个问题的参考吗?
标签: java algorithm data-structures queue