本篇文章介绍c++中关于队列的stl相关方法及概念介绍,例举3个经典算法题

一、queue

队列,常用方法:

  • size_type size()
  • bool empty()
  • void push(value_type a)
  • void pop()
  • int back()
  • int front()

上图表示单向队列,push() = push_back(), pop = pop_back()(这里的等于表示意近)

二、deque

双向队列,常用方法:

  • size_type size()
  • bool empty()
  • void push_back(value_type a)
  • void pop_back()
  • void push_front(value_type a)
  • void pop_front()
  • int back()
  • int front()

上图表示双向队列,比如当push_back(1)时队列就变为x,y,1,根据图很好理解

经典例题:

求队列最大值,滑动窗口最大值,很经典的两道题,也很类似

这里举例给出求队列最大值的c++代码

class MaxQueue {queue<int> q1;deque<int> q2;
public:MaxQueue() {}int max_value() {if(q1.empty()) return -1;return q2.front();}void push_back(int value) {q1.push(value);while(!q2.empty() && value>=q2.back()){q2.pop_back();}//q2的头部总是当前q1的最大值q2.push_back(value);}int pop_front() {if(q1.empty()) return -1;int temp = q1.front();q1.pop();if(temp == q2.front()) q2.pop_front();return temp;}
};/*** Your MaxQueue object will be instantiated and called as such:* MaxQueue* obj = new MaxQueue();* int param_1 = obj->max_value();* obj->push_back(value);* int param_3 = obj->pop_front();*/

三、priority_queue

通常用于表示大顶堆、小顶堆

1.初始化方法:

  • //升序队列
  • priority_queue <int,vector<int>,greater<int> > q;
  • //降序队列
  • priority_queue <int,vector<int>,less<int> >q;
  • //数据类型,容器类型,排序方式(可以调用,也可以自己实现,类似于sort()的最后一个参数)
  • //记忆方式采取右边的为堆顶元素,比如less为a<b,b为堆顶元素,即为大顶堆
  • //默认构造:priority_queue<int> q;即为大顶堆

2.常用方法:

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

类似于栈的方法

3. 经典例题

大顶堆小顶堆的经典例题不用多说,这里提一个:n个元素求top k,面试常考题

queue emplace_c++ queue、deque、priority_queue/队列最大值/滑动窗口/top K相关推荐

  1. java queue 最大值_[剑指offer题解]队列的最大值/滑动窗口的最大值

    前言 众所周知,<剑指offer>是一本"好书". 为什么这么说? 因为在技术面试中,它里面罗列的算法题在面试中出现的频率是非常非常高的. 有多高,以我目前不多的面试来 ...

  2. 环形数组队列求滑动窗口最大值

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位.返回滑动窗口中的最大值. 示例: 输入: nu ...

  3. Leetcode1696. 跳跃游戏 VI[C++题解]:dp和单调队列求滑动窗口最值

    文章目录 题目分析 题目链接 单调队列板子链接 Deque知识补充 题目分析 题目重述:给定一个数组(有正数有负数)和一个步长k,从下标0处开始往前跳,每次最多往前跳k步.求跳到最后一个位置,得分之和 ...

  4. 详解--单调队列 经典滑动窗口问题

    单调队列,即单调的队列.使用频率不高,但在有些程序中会有非同寻常的作用. 动态规划·单调队列的理解 做动态规划时常常会见到形如这样的转移方程: f[x] = max or min{g(k) | b[x ...

  5. 栈和队列6:滑动窗口最大值

    问题描述: 题目链接: 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. ...

  6. 代码随想录算法训练营day13 | 239. 滑动窗口最大值 | 347.前 K 个高频元素

    一.239. 滑动窗口最大值 from collections import dequeclass MyQueue: #单调队列(从大到小def __init__(self):self.queue = ...

  7. 剑指offer:滑动窗口最大值

    文章目录 暴力做法 单调队列 题目来源 暴力做法 直接遍历所有的滑动窗口,分别判断最大值. 时间复杂度O(n * k) 空间复杂度O(n) class Solution {public:// 时间复杂 ...

  8. 求滑动窗口中的最大值和最小值

    滑动窗口: 一般使用双指针算法,左指针l和右指针r之间的空间称为窗口,由于指针是不断移动的,从而窗口也可以移动,称为滑动窗口. 滑动窗口的最值: 由于窗口是移动的,移动的过程中有新元素的加入也有旧元素 ...

  9. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

最新文章

  1. phpstorm 10 修改背景图片和字体
  2. 给新创建的用户 赋予所有的权利 *.* 查看权限 删除用户 ---------DCL用户权限管理篇...
  3. 不管你的x86能不能升级Win 11,反正树莓派能!|安装教程
  4. pyplot绘制图片_matplotlib系列之pyplot
  5. 将GDB中的输出定向到文件
  6. linux文件大小和目录,查看Linux目录和文件大小
  7. liunx基本命令(文件系统的使用和查找命令)
  8. python如何读取tfrecord_tensorflow读取tfrecords格式文件
  9. Datetime 24小时制
  10. The New iPad’s Achilles Heel
  11. zookeeper使用问题汇总
  12. java 汇率转换_汇率转换 实现了一个用于多币种之间汇率转换的程序 联合开发网 - pudn.com...
  13. 凯恩斯主义两个重要观念的由来
  14. Java实现socket 客户端 长连接
  15. 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
  16. 我是如何成为一名少儿编程竞赛老师的
  17. java获取网络时间_java使用ntp同步获取网络时间
  18. 7款易上手C语言编程软件推荐
  19. oracle oats 安装,找不到OffLine WLST課程
  20. 鸡尾酒排序Cocktail Sort(排序算法九)

热门文章

  1. python怎么创建变量_Python中通过函数对象创建全局变量
  2. cuk电路设计及matlab仿真,cuk斩波电路仿真毕业论文,绝对精品.doc
  3. 图片饱和度_做PPT时,文字放在图片上老是看不清,咋办?
  4. laravel encryptstring加密使用方法_磁盘加密怎么取消 重装系统后加密磁盘无法使用的解决方法...
  5. 实战HPUX 11.31 MC/SG更换锁盘
  6. vim 删除,复制和粘贴
  7. 做python开发要用多大的内存卡_编程用surface怎么样发(学python要多大内存)
  8. Volley源码学习1--volley结构图
  9. android java资源包下载网站
  10. 基于JAVA+Servlet+JSP+MYSQL的在线汽车订票系统