首页 > 其他分享 >单调队列(滑动窗口)

单调队列(滑动窗口)

时间:2024-07-02 12:01:06浏览次数:13  
标签:队列 tt ++ int hh 滑动 单调

154. 滑动窗口 - AcWing题库

单调队列和单调栈就是在暴力的基础上进行优化,把永远用不到的元素删除。

简而言之   就是比你好而且还在你后面的数你永远无法超越他。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n' 
const int N=5e5+10;
int q[N],a[N];//q存队列下标 
int tt=-1,hh; 


 


signed main()
{   
  ios::sync_with_stdio(0);
  cin.tie(0);cout.tie(0); 
  int n,k;
  cin>>n>>k;
  for(int i=0;i<n;i++) cin>>a[i];
  
  for(int i=0;i<n;i++)
  { if(i-k+1>q[hh]) ++hh;//如果长度大于k 队头 
   	while( hh<=tt &&  a[i]<=a[q[tt]]) 
	tt--; //不为空,并且如果i比队尾小,那么队尾不会用到
	q[++tt]=i;//进队 
	if(i+1>=k) cout<<a[q[hh]]<<" ";// 输出 
  }
  cout<<endl;
  hh=0;tt=-1;//重置 
  
  for(int i=0;i<n;i++)
  {
  	if(i-k+1>q[hh]) ++hh;
  	while(hh<=tt &&a[i]>=a[q[tt]]) 
  	tt--;
  	q[++tt]=i;
  	if(i-k+1>=0 ) cout<<a[q[hh]]<<" ";
  }
  
 
   
  
    
  
  
  
  
  
}

标签:队列,tt,++,int,hh,滑动,单调
From: https://blog.csdn.net/hui_le4/article/details/140122879

相关文章

  • Redis Stream 作为消息队列的详尽笔记
    概述RedisStream是Redis5.0版本引入的数据结构,用于消息传递。基础概念结构:消息链表,每个消息有唯一ID和内容。命名:每个Stream有唯一名称,对应RedisKey。消费组(ConsumerGroup):可挂载多个消费组,需手动创建。每个组有游标last_delivered_id,记录消费进度。消费......
  • 数组模拟队列
    829.模拟队列-AcWing题库#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'constintN=5e5+10;intq[N];inthh=0,tt=-1;//hh头tt尾signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • 消息队列面试题----基础篇
    ##1、为什么要用MQ?MQ有哪些使用场景?###什么是消息队列消息队列是一种异步的通信方式,用于在分布式系统中管理消息传递。消息队列采用了生产者-消费者模型,生产者将消息发送到队列中,而消费者则从队列中接收消息。###为什么要使用消息队列其实就是问问你消息队列都有哪些使......
  • RabbitMQ延时任务通过死信队列实现(golang)
    最近在一个项目中,需要实现在用户上传图片30分钟后,删除对应图片,以保证用户隐私。我们使用rabbitmq来实现。基于rabbitmq实现延时任务有两种方式,一种为队列ttl+死信exchange,另一种为安装插件(https://github.com/rabbitmq/rabbitmq-delayed-message-exchange)。其中安装......
  • Qml 实现一个垂直滑动条
    ScrollBar.vertical:ScrollBar{id:scrollBarvisible:trueactive:trueorientation:Qt.VerticaltopPadding:0bottomPadding:0anchors.top:parent.topanchors.left:pa......
  • 探索数据结构:队列的的实现与应用
     ......
  • 代码随想录算法训练营第十天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、 1
    今天学习了栈与队列这两个数据结构,栈是一个先进后出的结构,在C++中用stack进行表示,有push、pop、top、empty这些属性;队列是一个先进后出的结构,有push、pop、front、back。empty这些属性。在底层实现上,他们都是用deque双向队列进行实现的。232.用栈实现队列题目链接:232.用栈......
  • 消息队列选型之 Kafka vs RabbitMQ
    在面对众多的消息队列时,我们往往会陷入选择的困境:“消息队列那么多,该怎么选啊?Kafka和RabbitMQ比较好用,用哪个更好呢?”想必大家也曾有过类似的疑问。对此本文将在接下来的内容中以Kafka和RabbitMQ为例分享消息队列选型的一些经验。一、什么是消息队列消息队列即Messag......
  • Linux进程间的通信方式(一)System V 消息队列
    文章目录前言1.消息队列概念2.消息队列的应用场景3.消息队列接口分类3.1SystemV消息队列3.2POSIX消息队列4.消息队列相关操作函数4.1ftok函数(获取一个key值)4.2msgget函数(根据key值获取一个消息队列操作符)4.3msgctl函数(设置消息队列属性)4.4msgsnd函......