实现Queue,使FindMin和FindMax为0(1)

时间:2012-08-21 19:39:26

标签: java algorithm data-structures queue

这是一个非常常见的问题,但我在任何地方都没有找到明确的答案。 我正在做的是使用2个堆栈实现Queue,并且在节点和数据中,我也保持最小值和最大值。实现在Java中完成。

现在,问题是如果first element is Max / Min和我deQueue它,那么其余的节点包含最小/最大值作为出列的值。

示例: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 个答案:

答案 0 :(得分:0)

在heapsort中查看heapify()。我想这就是你需要的......

答案 1 :(得分:0)

this你需要什么?

双端队列可以用两种方式编码:

  • 有两个队列副本,每个元素都保持一个指向相应元素的链接

  • 使用名为min-max heap

  • 的数据结构