1. 题目

请定义一个队列并实现函数 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]示例 2:
输入:
["MaxQueue","pop_front","max_value"]
[[],[],[]]
输出: [null,-1,-1]限制:
1 <= push_back,pop_front,max_value的总操作数 <= 10000
1 <= value <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 一个队列正常存储队列数据
  • 一个双端队列存储最大值,当push进一个值 v 时,前面比 v 小的全部pop掉,保持 deque 内单调递减
  • 出队时,检查队列首位和最大值首位相同吗?相同最大值队列也需要出队
class MaxQueue {int v;queue<int> q;deque<int> Maxlist;
public:MaxQueue() {}int max_value() {if(q.empty())return -1;return Maxlist.front();}void push_back(int value) {q.push(value);while(!Maxlist.empty() && Maxlist.back() < value)Maxlist.pop_back();Maxlist.push_back(value);}int pop_front() {if(q.empty())return -1;if(q.front() == Maxlist.front())Maxlist.pop_front();v = q.front();q.pop();return v;}
};

剑指Offer - 面试题59 - II. 队列的最大值(deque模拟单调栈)相关推荐

  1. 剑指offer 面试题59 - II. 队列的最大值

    请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1). 若队列为空,pop_front ...

  2. 剑指offer——面试题59:对称的二叉树

    剑指offer--面试题59:对称的二叉树 Solution1: 书上的思路就挺好的 书中的思路:针对二叉树的前序遍历,定义一种遍历算法,先遍历右子结点再遍历左子结点,并考虑进NULL的情况 /* s ...

  3. 剑指offer | 面试题53 - II. 0~n-1中缺失的数字

    转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 一个 ...

  4. 面试题59 - II. 队列的最大值

    2020-05-15 1.题目描述 队列的最大值 2.题解 这个题目有点像滑动窗口求最大值以及栈的最大值的结合体,我们可以模仿滑动窗口求最大值,开辟一个 双端队列来求解最大值. 3.代码 class ...

  5. 剑指Offer - 面试题58 - II. 左旋转字符串

    1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...

  6. 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

    文章目录 1. 题目 2. 解题 2.1 充分利用题目信息 2.2 位运算 2.3 二分查找 1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范 ...

  7. 剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)

    1. 题目 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 示例 1: 输入:targe ...

  8. 剑指offer 面试题58 - II. 左旋转字符串

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结 ...

  9. 剑指offer面试题[59]-对称的二叉树

    题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. /* struct TreeNode {int val;struct Tree ...

最新文章

  1. mysql autocommit_【整理】MySQL 之 autocommit
  2. P1032 字串变换
  3. 和Hibernate3.6相比,Hibernate 5.x中的增删改性能降低了
  4. 在X++中使用IoC/DI模式应对不断变化的客户需求
  5. linux 下的igv软件,Linux IGV 自动画图 -- for 自动化报告
  6. [deviceone开发]-大家比较关注的应用内部升级
  7. Android重力感应实现方式简介
  8. 05_过滤器解决请求中文乱码(继承HttpServletRequestWrapper)
  9. 兄弟连新版Linux视频教程
  10. MySQL 数据库基础知识(系统化一篇入门)
  11. 微信小程序+vant组件 侧边导航栏切换显示
  12. Python练习3:求N的多次方
  13. 单例模式之饿汉式单例模式
  14. 《中国传统文化学习之幸福人生讲座》有感
  15. (最新最详细)eclipse的preferences下没有Android首选项?
  16. vue源码分析-响应式系统(二)
  17. 精通正则表达式(第3版)
  18. NIO、BIO编程模型与零拷贝
  19. LWN:改进英文文档质量的工具!
  20. 量化交易管理则是“定性思想的量化应用”

热门文章

  1. c++调用Libsvm
  2. Makefile赋值符号的使用——= := ?= +=
  3. c++远征之模板篇——函数模板、类模板
  4. 【洛谷p1464】 Function
  5. UIImage 裁剪图片和等比列缩放图片
  6. PHP上传文件大小限制的问题(转)
  7. SQL获取变量类型以及变量最大长度
  8. C++ 中的 #pragma warning(push) 和 #pragma warning(pop)有什么用
  9. 自己动手写一个 strace
  10. #define的高级用法