当前位置: 首页 > web >正文

23-单调队列-滑动窗口

题目

来源

154. 滑动窗口 - AcWing题库

思路

详见代码

代码

/*
构造单调队列进行优化,思路与单调栈的思路类似
--
队列来维护窗口:新元素插入到队尾,旧元素从队头移除
如果暴力去实现的话,就是暴力去遍历队列中的所有元素,
计算出相应的最大值和最小值;时间复杂度为o(nk)
--
最小值求解:
3,-1,-3:只要-3存在,那么3,-1一直都不会当最小值输出
其实就是删除逆序对;使之成为严格单调上升的队列;
最小值为相应的队头元素
--
最大值同理
*/#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],q[N];//队列存储的是相应的下标int main(){int n,k;cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];}//寻找最小值int hh=0,tt=-1;for(int i=0;i<n;i++){if(hh<=tt && i-k+1>q[hh])hh++;//旧元素滑出窗口了,从队头删掉while(hh<=tt && a[q[tt]]>=a[i])tt--;//因为是插入在队尾,所以队尾元素要是比当前的大,就可以删掉q[++tt]=i;if(i>=k-1)cout<<a[q[hh]]<<" ";}cout<<endl;//寻找最大值hh=0,tt=-1;for(int i=0;i<n;i++){if(hh<=tt && i-k+1>q[hh])hh++;//旧元素滑出窗口了,从队头删掉while(hh<=tt && a[q[tt]]<=a[i])tt--;//因为是插入在队尾,所以队尾元素要是比当前的大,就可以删掉q[++tt]=i;if(i>=k-1)cout<<a[q[hh]]<<" ";}return 0;
}
http://www.xdnf.cn/news/6214.html

相关文章:

  • LeetCode 每日一题 3341. 到达最后一个房间的最少时间 I + II
  • NAT网关(网络地址转换网关)的用途与场景
  • Mac的web服务器
  • [滑动窗口]越短越合法(可转化成越长越合法)
  • 【每天一个知识点】模型轻量化(Model Compression and Acceleration)技术
  • 麒麟环境下Selenium的使用
  • 语音识别-2
  • 【Oracle专栏】清理告警日志、监听日志
  • 【进程控制二】进程替换和bash解释器
  • 【数据库复习】SQL语言
  • Java生成可控的Word表格功能开发
  • 《世界经济浪潮中的AI变革与展望》
  • 涨薪技术|0到1学会性能测试第64课-SQL监控之Trace选项
  • 第二讲:电源滤波器设计与仿真-基于单管反激电源
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块一
  • FPGA:Xilinx Kintex 7实现DDR3 SDRAM读写
  • Axure设计之内联框架切换页面、子页面间跳转问题
  • day20-线性表(链表II)
  • Adobe DC 2025安装教程
  • Leetcode数组day1
  • 深度学习—BP神经网络
  • Ascend的aclgraph(八)AclConcreteGraph:capture_end
  • 网络编程超时检测,unix域套接字,粘包
  • WPF Datagrid 数据加载和性能
  • Spring的 @Validate注解详细分析
  • 【springcloud学习(dalston.sr1)】Ribbon负载均衡(七)
  • 【行为型之模板方法模式】游戏开发实战——Unity标准化流程与可扩展架构的核心实现
  • 数据库MySQL学习——day10()
  • FFMPEG 与 mp4
  • elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析