题目描述
定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value 需要返回 -1
示例 1:
输入:
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2]
解题思路
使用双队列来完成,第一个队列存储压入的数据,进行入队和出队操作,第二个队列完成对最大数值的排序,从队列的尾部开始入队,如果当前值大于队尾的值,则删除尾部的值,直到找到比当前值大的值(即第二队列根据数据顺序,删除式地降序排列)。最大值的在第二队列的队首
语言积累和技巧
一、使用单向队列+双向队列:
双向数组用来处理max值,方便操作,单向数组进行队列的出队和入队
poll(),peek(),peekFirst(),pollLast()
二、使用数组来处理,使用头尾指针来模拟双向队列
三、使用链表
1、使用链表需要注意指针的移位,还有就是两个链表的游标在链表为空的时候,需要移动到链表的表头上去,不然容易有空指针
对这题来说,链表的操作逻辑有点复杂,还是数组好,其次是队列
vscode代码链接
https://github.com/lunaDolphi...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。