Java 实现队列,使FindMin和FindMax为0(1)

Java 实现队列,使FindMin和FindMax为0(1),java,algorithm,data-structures,queue,Java,Algorithm,Data Structures,Queue,这是一个很常见的问题,但我还没有找到一个明确的答案。 我所做的是使用2个堆栈实现队列,在节点和数据中,我还维护最小值和最大值。实现是用Java完成的 现在的问题是,如果第一个元素是Max/Min并且我将其出列,那么其余的节点包含的Min/Max值与出列的值相同 示例:107892 节点-[数据,最大值,最小值] [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个堆栈实现队列,在节点和数据中,我还维护最小值和最大值。实现是用Java完成的

现在的问题是,如果
第一个元素是Max/Min
并且我将其出列,那么其余的节点包含的Min/Max值与出列的值相同

示例:
107892

节点-[数据,最大值,最小值]

[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)

我的算法基本上适用于堆栈,我使用的是队列。那么,我如何修改我的算法,使其给出正确的结果呢?

请查看heapsort中的内容。我想这就是你需要的…

是你需要的吗

双端队列可以通过两种方式进行编码:

  • 拥有队列的两个副本,并为每个元素维护到相应元素的链接

  • 使用数据结构调用


如果这是一个优先级队列,并且您希望跟踪最大元素数,那么使用堆栈将无法获得任何结果。优先级队列的实现与队列完全不同。“这是一个非常常见的问题……我正在使用两个堆栈实现队列”您已经问过很多次了,但我从未听过有人问过这个问题,主要是因为它没有任何意义,也许只是作为面试问题。你能说说你为什么要这么做吗。“你想解决什么问题?”LouisWasserman从技术上讲,优先级队列会给你下一个最低的元素。e、 g.如果按时间排序,则希望出现下一个节点。当您可以使用队列作为队列时,为什么要使用两个堆栈来实现队列?您能说出它的用途吗?你想解决什么现实问题?你能提供一份其他人讨论过这个问题的参考资料吗?