单调队列

  • 利用双端队列实现
    • 初始化双端队列
    • 维护队头是最大元素
    • 维护队头是最小元素
  • 利用数组实现
    • 维护队头是最大元素

顾名思义,就是用一点巧妙的方法,使得队列中的元素全是单调递增或递减,常常用来解决滑动窗口的一系列问题。
好了,废话不多说,上正题。
模板思路在代码中,超详细,看完你就悟了。

利用双端队列实现

初始化双端队列

void init()
{//必须从前边删while (!q1.empty()) q1.pop_front();while (!q2.empty()) q2.pop_front();}

维护队头是最大元素

k是区间范围。

struct node{int order;//对应下标int value;//对应值
}tmp;
deque<node>vis;
int main()
{int n,k,t;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){scanf("%d",&t);//当前值// 当队列不为空,i是当前值得小标与队头元素下标之差大于等于k//表明,虽然你队头大,但是已经不在有效范围了,所以要丢掉if(!vis.empty() && i-vis.front().order>=k) vis.pop_front();// 队列不为空,因为要维护的队列是队头是最大的,那么这个队列就//是一个递减队列(想一下),所以当前值要比队尾小才可以,//否则就将队尾元素丢掉,直到队尾比当前值小,或队列为空while(!vis.empty() && vis.back().value<=t) vis.pop_back();tmp.order=i;tmp.value=t;vis.push_back(tmp);if(i>=k-1){printf("%d\n",vis.front().value);}}
}

维护队头是最小元素

```cpp
struct node{int order;//对应下标int value;//对应值
}tmp;
deque<node>vis;
int main()
{int n,k,t;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){scanf("%d",&t);//当前值if(!vis.empty() && i-vis.front().order>=k) vis.pop_front();// 其余都一样,只不过下面这一行,变成当前值要大于队尾,//结合上面想想就出来了,因为是要维护一个递增队列嘛while(!vis.empty() && vis.back().value>=t) vis.pop_back();tmp.order=i;tmp.value=t;vis.push_back(tmp);if(i>=k-1){printf("%d\n",vis.front().value);}}
}

利用数组实现

维护队头是最大元素

    vector<int> maxSlidingWindow(vector<int>& nums, int k) {//存的是下标vector<int> q(nums.size(),0); vector<int> vec;int tail = 0;//队尾指针int  head = 0;//队头指针for(int i = 0;i< nums.size();i++){//淘汰操作//和上边对比下,队列不为空,不就是队尾指针大于队头指针嘛//nums[i] 当前值,nums[q[tail-1]] 队尾值// 丢掉队尾元素,不就是将队尾指针前移嘛while(tail > head && nums[i] >= nums[q[tail-1]]) tail--;//尾插操作q[tail++] = i;//过期头删操作//q[head]  不就是对首小标嘛if(i - q[head] >= k) head++;if(i >= k) vec.push_back(nums[q[head]]);}return vec;}

看到这里大家有没有枉然大悟呀

单调队列(一套模板通吃)相关推荐

  1. 【CF 1195】Basketball Exercise/Submarine in the Rybinsk Sea (hard edition)/OpenStreetMap+二维单调队列滑动窗口模板

    寡人认为C,E都是比较板的题 butD2也太ex了,大大是被那个mod精给弄疯了,我mod了那么多次还是炸了longlong orz 文章目录 二维单调队列模板 C:Basketball Exerci ...

  2. 多重背包O(VN)算法——单调队列优化

    多重背包问题: 有N种物品和容量为V的背包,若第i种物品容量为v[i],价值为w[i],总共有n[i]件,怎样装才能使背包内的物品总价值最大? 设dp[i][j]表示对容量为j的背包,处理完前i种物品 ...

  3. 365天挑战LeetCode1000题——Day 124 单调队列模板

    单调队列模板 class MaxQueue {private:queue<int> origin;deque<int> dq; public:MaxQueue() {}int ...

  4. hdu3415 单调队列模板题

    比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring&g ...

  5. 信息竞赛进阶指南--单调队列模板

    // 单调队列 int l = 1, r = 1; q[1] = 0; // save choice j=0 for(int i = 1; i <= n; i++) {while (l < ...

  6. POJ2823 滑动窗口 单调队列模板题 第一次用了发函数指针

    题意 有一个n长的序列,用k长的窗口在上面滑动,去每次窗口中最小和最大的数. 思路 使用单调队列,维护这个队列是单调的.以取最小元素为例,若窗口内左边元素>=右边元素,则左边元素失去保留的意义, ...

  7. 0x12.基本数据结构 — 队列与单调队列

    目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...

  8. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  9. python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...

    课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...

最新文章

  1. 我是一个机箱 《转载》
  2. 上不了网,我的解决过程
  3. Js基本函数 2017-03-20
  4. 消除电脑的四大噪音源
  5. P4071-[SDOI2016]排列计数【组合计数,错排】
  6. SAP ABAP打印MM采购发票打印开发
  7. maven使用出现的错误
  8. hive 配置mysql_Hive的mysql安装配置
  9. Centos7访问本地电脑共享文件夹遇到的问题
  10. 中小企业的进步:热爱大数据
  11. 转:正则表达式简介及在C++11中的简单使用
  12. SQL的别名和SQL的执行顺序和SQL优化
  13. Java实现简单图书管理系统
  14. android打开cad文件怎么打开方式,dwg文件怎么打开_手机上dwg文件用什么程序可以打开...
  15. 海思移植 APR(Apache Portable Runtime)
  16. 第三阶段应用层——1.6 数码相册—使用FreeType在LCD上显示多行文字
  17. Flutter pageview indicator指示器实现
  18. 手机计算机图标大全,我的电脑里我的手机图标怎么删除
  19. php中插入word文档,word里如何插入pdf
  20. 曼尼托巴大学计算机科学专业怎么样,加拿大曼尼托巴大学优势专业有哪些

热门文章

  1. mysql 乐观锁 version_乐观锁-version的使用
  2. linux关闭xdmcp服务,使用Xmanager远程CentOS 7服务器(XDMCP)
  3. An internal error occurred during: Launching MVC on Tomcat 6.x.
  4. 导出PDF和Zip文件的工具类
  5. 「后端小伙伴来学前端了」Vue脚手架中 render 函数
  6. 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题
  7. savexml php,PHP DOMDocument saveXML()用法及代码示例
  8. greenplum客户端工具_如何从Teradata迁移到Greenplum(上篇)
  9. 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题
  10. python上传文件到windows_python自动化-WinSpy+pywin32文件上传操作