题目描述

定义一个队列并实现函数 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...

https://github.com/lunaDolphi...

https://github.com/lunaDolphi...


blueDolphin
12 声望1 粉丝