滑动窗口专题

news2025/1/14 1:21:40

前言:

单调队列模板(左边是队头hh,右边是队尾tt)

首先维护两个指针hh和tt的位置

常见模型:找出滑动窗口中的最大值/最小值
int hh = 0, tt = -1;
for (int i = 0; i < n; i ++ )
{
    while (hh <= tt && check_out(q[hh]))    hh ++ ;  // 判断队头是否滑出窗口
    while (hh <= tt && check(q[tt], i))     tt -- ;
    q[ ++ tt] = i;
}

AcWing 154. 滑动窗口(模板题)--单调队列

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N], q[N];     //q存idx
int n, k;
int main(){
    cin >> n >> k;
    for(int i = 0; i < n; i ++) cin >> a[i];
    int hh = 0, tt = -1;
    // Q1: 输出每个窗口中的最小值
    for(int i = 0; i < n; i ++){    // 二重维护
        // step1: 维护一下窗口长度不超过k(左边队头hh的位置!)
        if(hh <= tt && i - k + 1 > q[hh])   hh ++;
        // step2: 维护单调队列q是单调增的即可
        while(hh <= tt && a[i] < a[q[tt]])  tt --;
        q[++ tt] = i;
        if (i + 1 >= k)             // 只有当有了一个完整的窗口后才能进行输出
            cout << a[q[hh]] << " "; 
    }cout << endl;
    // Q2: 输出每个窗口中的最大值
    hh = 0, tt = -1;                // 别忘记要先重置
    for(int i = 0; i < n; i ++){    // 二重维护
        // step1: 维护一下窗口长度不超过k(左边队头hh的位置!)
        if(hh <= tt && i - k + 1 > q[hh])   hh ++;
        // step2: 维护单调队列q是单调减的即可
        while(hh <= tt && a[i] > a[q[tt]])  tt --;
        q[++ tt] = i;
        if (i + 1 >= k)
            cout << a[q[hh]] << " "; 
    }
}

Leetcode 3. 无重复字符的最长子串

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.length(), res = 0;
        unordered_set<int> Set; // 用于判断当前滑动窗口中存在字符情况
        int l = 0, r = -1;      // 类模板中的hh和tt(只不过这里不考虑单调性)
        for (int i = 0; i < n; i ++){
            while(l <= r && Set.count(s[i])){
                l ++;   // 维护出一个合法的单调队列,进行res更新
                if(s[i] == s[l - 1])    break;  // 剔除掉那个重复的词之后即完成了维护
                else    Set.erase(s[l - 1]);    // 剔除非重复char需要在set中删除
            }
            r ++;
            Set.insert(s[r]);
            res = max(res, r - l + 1);
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区间DP---多边形 与金字塔

多边形&#xff1a;https://www.acwing.com/problem/content/285/ 其实就是环形的石子合并&#xff0c;只不过由于乘法的存在还要记录一下最大值与最小值。 AC代码&#xff1a; #include <bits/stdc.h> using namespace std; int a[105]; char b[105]; int dpmax[105]…

U盘跨机使用难题:打不开的困境与数据恢复之道

在数字时代&#xff0c;U盘作为我们日常数据交换和存储的重要工具&#xff0c;扮演着不可或缺的角色。然而&#xff0c;当您满怀期待地将U盘插入另一台电脑&#xff0c;却遭遇“无法打开”的尴尬时&#xff0c;那份焦急与无助可想而知。本文将深入探讨“U盘在别的电脑用了后打不…

隐写工具steghide linux编译安装

1、git clone https://github.com/StefanoDeVuono/steghide.git 2、autoreconf -i 3、./configure 4、make 编译完成后再src目录下又steghide执行下程序 报错&#xff1a;configure: error: cannot find required auxiliary files: compile时需要执行autoreconf 如果往j…

外卖项目day11---微信支付(跳过微信接口进行伪支付,超超超细节哦!!!)/cpolar内网穿透工具使用

这里一般个人是没有的&#xff0c;我们用不到 内网穿透工具临时获取到临时域名(可用可不用&#xff0c;拓展一下也好&#xff09; 安装客户端&#xff0c;在相应目录打开cmd窗口&#xff0c;输入以下代码 可以看到这里的请求地址变了&#xff0c;这就是内网穿透工具的作用 微信…

Windows Server 2025 Preview 部署 Ⅱ—— 在ESXi 8上安装 Windows Server 2025

目录 3. 在ESXi 8上安装 Windows Server 20253.1 创建Win Server 虚拟机&#xff08;1&#xff09;创建 VM&#xff08;2&#xff09;选择创建类型&#xff08;3&#xff09;设置VM名和选择guest OS&#xff08;4&#xff09;选择存储&#xff08;5&#xff09;自定义虚拟机组件…

leafletjs-gis中如何判断图层或元素是点,线,面的类型

查找地图上的图层&#xff0c;要素&#xff1a; window.MapLeaflet.eachLayer(function (layer) {if (layer ! window.MapLeaflet) {console.log("layer instanceof L.Polyline", layer instanceof L.Polyline)// L.Marker,L.Polyline, L.Polygon||L.Rectangle,L.C…

spring boot(学习笔记第十六课)

spring boot(学习笔记第十六课) Spring boot的websocket(点对点) 学习内容&#xff1a; Spring boot的websocket&#xff08;点对点&#xff09;spring boot(学习笔记第十六课) 1. Spring boot的websocket&#xff08;点对点&#xff09; 前面练习了websocket的广播模式。 接…

1.GPIO

理论说明 输入 上拉输入&#xff1a;拉高电平 下拉输入&#xff1a;拉低电平 浮空输入&#xff1a;不拉高也不拉低电平 输出 开漏输出&#xff1a;不能输出高电平&#xff08;P-MOS不可用&#xff0c;则只能低电平&#xff09; 推挽输出&#xff1a;可输出高低电平 输出速率…

informer中DeltaFIFO机制的实现分析与源码解读

informer中的DeltaFIFO机制的实现分析与源码解读 DeltaFIFO作为informer中重要组件&#xff0c;本文从源码层面了解是如何DelatFIFO是实现的。 DeltaFIFO的定义 找到delta_fifo.go的源码&#xff0c;位于client-go/tools/cache/delta_fifo.go 代码结构大致如下: store定义…

【priority_queue的模拟实现】

priority_queue的模拟实现 小杨 容器适配器&#xff1a;priority_queue priority_queue即优先级队列是一种容器适配器&#xff0c;根据严格的弱排序标准(即排序规则可以更改),他的第一个元素总是它所包含的元素中最大的。优先队列将特定容器类封装作为其底层容器类。标准容器类…

ElasticSearch优化实战:打造高性能搜索引擎的秘籍

在当今这个大数据时代&#xff0c;信息的海量增长对搜索技术提出了前所未有的挑战。用户不仅需要快速准确地从数以亿计的数据中找到所需信息&#xff0c;还希望搜索引擎能够提供个性化和智能化的搜索体验。ElasticSearch作为市场上领先的搜索引擎&#xff0c;因其强大的全文搜索…

Typora2024最新版破解方法(亲测可用)

此方法非常简单&#xff0c;无需安装dll补丁&#xff0c;无需修改注册表&#xff0c;无需使用老版本。仅需修改部分文件内容即可 方法步骤 步骤一 下载并安装Typora 安装Typora 打开官网 下载并安装最新版即可 点击访问Typora官网 https://typoraio.cn/ 步骤二 修改文件 …

java面向对象重点总结

文章目录 java面向对象重点总结类与实例构造方法方法重载属性与修饰符封装继承多态重构抽象类接口抽象类和接口的区别&#xff1a;集合泛型 java面向对象重点总结 对象是一个自包含的实体&#xff0c;用一组可识别的特性和行为来标识。 面向对象编程&#xff0c;英文叫Object…

mcasttest-tool组播检测工具

作者&#xff1a;广大 检测组播 mcasttest-tool是oracle组播检测工具&#xff0c;组播是oracle 11.2.0.2开始的新功能。 1、上传mcasttest工具解压并授权 [rootrac1 soft]# cd /u01/soft/ [rootrac1 soft]# tar -xvf mcasttest.tgz[rootrac1 soft]# chown -R grid:oinstall…

Animate软件基础:“分散到图层”创建的新图层

FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.co…

Pytorch实现线性回归Linear Regression

借助 PyTorch 实现深度神经网络 - 线性回归 - 第 2 周 | Coursera 线性回归预测 用PyTorch实现线性回归模块 创建自定义模块&#xff08;内含一个线性回归&#xff09; 训练线性回归模型 对于线性回归&#xff0c;特定类型的噪声是高斯噪声 平均损失均方误差函数&#xff1a…

Mallet:一款针对任意协议的安全拦截代理工具

关于Mallet Mallet是一款功能强大的协议安全分析工具&#xff0c;该工具支持针对任意协议创建用于安全审计的拦截代理&#xff0c;该工具本质上与我们所熟悉的拦截Web代理类似&#xff0c;只是通用性更强。 工具运行机制 Mallet建立在Netty框架之上&#xff0c;并且依赖于Net…

文案人的梦工场,网易入职指南!

网易云对于咱们一些有点文艺的文案策划来说&#xff0c;简直就是梦中情司。 在这里工作锻炼机会很多&#xff0c;也很开拓眼界&#xff0c;能获得相当于在别处3倍能力的成长速度&#xff0c;福利待遇也是很好的。 要进入网易云音乐做文案策划&#xff0c;你可以按照以下步骤进…

数据结构的基本概念与算法2

线性表 &#xff1a; 线性表 是具有相同数据类型的 n (n > 0) 个数据元素的有限序列&#xff0c;其中 n 为表长&#xff0c;当 n 0 时线性表是一个空表&#xff1b;若用 L 命名线性表&#xff0c;则其一般表示为&#xff1a;L (a1 , a2 , ... ai , ai1 , ... an) 上述中&a…

月木学途开发 2.项目架构

1.项目介绍 月木学途是一款it在线学习网站&#xff0c;项目采用前后端分离架构。前端开发主要使用vue.js&#xff0c;后端使用Spring Cloud Alibaba技术栈。项目包含学习网站的大部分功能&#xff0c;分为管理员端和用户端。管理员端有权限管理、课程管理、网站管理、求职模块管…