美文网首页编程之美
BoP——3.7队列中最大值问题

BoP——3.7队列中最大值问题

作者: Myth52125 | 来源:发表于2017-10-19 16:45 被阅读0次

题目

维护一个队列,同时提供一个函数输出最大值。

方法一

正常的队列,增加一个max()函数,遍历队列的每一个元素,返回最大值。
O(n)

注意:不能使用一个额外的变量记录最大值,因为如果最大值被弹出,那么下一个最大值不知道是谁

方法二

使用二叉堆,最大二叉堆。
堆顶维护最大值。同时,每个节点,保存一个next节点,表示在队列中的位置。
再额外的保存一个指针cur,指向队列的头部。
A->B->C->D
A是最早被添加的信息,cur指向A,pop之后指向B。
然后将ABCD使用最大二叉堆来存放。

最大值可以在O(1)内完成,但是删除和添加O(logN)

方法三

改进栈结构,栈中在维护一个栈,保存最大值信息,push时更新最大值,pop时判断最大值是否被pop出,因为是栈结构,因此,栈顶元素永远先于栈底的出。

然后使用两个两个栈结构来实现队列。
最大值max(),就返回两个栈中维护最大值信息栈的栈顶元素较大的那个。

注意:使用常规的队列,保存一个栈来记录最大值。push时,更新栈,压入更大的值。pop时,判断最大值是否出栈。这种方法也不行

相关文章

网友评论

    本文标题:BoP——3.7队列中最大值问题

    本文链接:https://www.haomeiwen.com/subject/watpuxtx.html