154. 滑动窗口
窗口 滑动
2023-09-14 09:15:03 时间
思路:
窗口用队列来存储,类似于单调栈,只不过不是从右往左删除,而是从左往右删除,每次将窗口内比自己大的或者相等的数从左边弹出,因为窗口往右移动的过程中,最小值不可能选取比当前值还有小的数。
例如:窗口[1,3,-1]中应该将1、3弹出
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,k;
int a[N],q[N],head,tail;//队列里面存储下标
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
//先算窗口最小值
head=0,tail=-1;
for(int i=0;i<n;i++){
if(i-q[head]+1>k&&head<=tail) head++;//非空队列且队列长度大于窗口长度,窗口向右移动一格
while(a[q[tail]]>=a[i]&&head<=tail) tail--;//将窗口内比当前大的值都删除掉
q[++tail]=i;
if(i>=k-1) printf("%d ",a[q[head]]);
}
printf("\n");
//再算窗口最大值
head=0,tail=-1;
for(int i=0;i<n;i++){
if(i-q[head]+1>k&&head<=tail) head++;//非空且队列长度大于窗口长度,窗口向右移动一格
while(a[q[tail]]<=a[i]&&head<=tail) tail--;//将窗口中比当前小的都删掉
q[++tail]=i;
if(i>=k-1) printf("%d ",a[q[head]]);
}
printf("\n");
}
相关文章
- LeetCode每日一题-2:滑动窗口的最大值
- leetcode-剑指offer59-I 滑动窗口的最大值
- TCP的滑动窗口是怎么回事,不来了解一下吗?
- 【day03】LeetCode(力扣)每日一刷[239. 滑动窗口最大值 ][1422. 分割字符串的最大得分][1046. 最后一块石头的重量 ]
- Visual Studio 即时窗口实用技巧
- 听说你还不会滑动窗口?来一篇文章带你学会滑动窗口算法
- 前端刷完这12道滑动窗口,是不是就可以出山面试了
- 【面试高频题】难度 1.5/5,常规滑动窗口运用题
- TCP滑动窗口机制(附图例)
- DockView for Mac(Dock窗口预览工具)
- 知识图谱新词挖掘1-滑动窗口解法
- 各窗口共同卖票 【 Java 多线程 】
- 【计算机网络】数据链路层 : 流量控制 ( “流量控制“ 机制 | 停止-等待协议 | 滑动窗口协议 | 后退 N 帧协议 GBN | 选择重传协议 SR | 滑动窗口 与 流量控制、可靠传输 )
- 让窗口管理也能自动化,基于 yabai+skhd 的 macOS 窗口管理系统
- python开发的简单窗口界面的倒计时界面详解编程语言
- TCP/IP滑动窗口详解编程语言
- 窗口分屏体验:Linux 的多窗口操作(linux多个)
- Linux串口读写:探究新世界的窗口(linux串口读写)
- TCP 滑动窗口 与窗口缩放因子(Window Scaling)
- 「Oracle时间窗口」的作用和使用方法简介(oracle时间窗口)
- 开启Redis之旅Cmd窗口命令启程(开启redis命令cmd)
- 使用CMD窗口连接MySQL数据库(cmd窗口连接mysql)
- MySQL窗口函数快速统计排序分组与筛选数据(mysql下的窗口函数)
- 如何在MySQL下打开显示命令窗口(mysql下显示命令窗口)
- 微软:Win11居中开始菜单/圆角窗口不是抄袭macOS、也不影响性能
- 多浏览器支持的右下角浮动窗口
- 自动最大化窗口的Javascript代码
- android实现百度地图自定义弹出窗口功能