【滑动窗口最值】滑动窗口的最值的一种方案

这篇具有很好参考价值的文章主要介绍了【滑动窗口最值】滑动窗口的最值的一种方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  假设现在有数组a[n],和滑动的窗口长度为k <= n,要求长度为k的滑动窗口的最值,一般来说,我们会遇到以下问题:

【滑动窗口最值】滑动窗口的最值的一种方案

 

  在窗口向右滑动时,由于不知道将要删除的元素在窗口中的位置,于是只能暴力遍历窗口来删除旧元素。增加了时间复杂度到O(n^2logn)

  以下是解决该问题的一种方案:

  使用一个额外的优先队列来储存待删除的元素,等到储存窗口的优先队列的队首元素和待删除元素所在元素相同时就一直删除俩队首,直到一方为空或者队首不再相等,时间复杂度为O(n*logn)

  相同代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,k;
signed main ()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>n>>k;
    vector<int> mn;
    vector<int> mx,a(n);
    priority_queue<int> p,q;
    priority_queue<int,vector<int>,greater<int>> p1,q1;
    for(int i = 0; i < n; i++){
        cin>>a[i];
    }
    
    for(int i = 0; i < k; i++){
        p.push(a[i]);
        p1.push(a[i]);
    //首先创建长度为k的两个滑动窗口 } mx.push_back(p.top()); mn.push_back(p1.top());
//存下初始状态的答案
for(int i = k; i < n; i++){ q.push(a[i - k]); q1.push(a[i - k]);
//滑动窗口记录下应该删除的元素
if(p.size() && q.size()){ while(p.top() == q.top()){ p.pop(); q.pop(); if(p.empty() || q.empty()) break; } } if(p1.size() && q1.size()){ while(p1.top() == q1.top()){ p1.pop(); q1.pop(); if(p1.empty() || q1.empty()) break; } } p.push(a[i]); p1.push(a[i]); mx.push_back(p.top()); mn.push_back(p1.top()); } int len = mx.size(); for(int i = 0; i < len; i++){ cout<<mn[i]<<" "; } cout<<'\n'; for(int j = 0; j < len; j++){ cout<<mx[j]<<" "; } return 0; }

  那么久只剩一个问题了,为什么时间复杂度减少到了O(n*logn) 看起来while循环很多对吧,其实我们换个角度考虑问题,每个元素最多入队4次,出队4次,

  我们一共有n个元素消耗时间T(4*n) 插入的时间复杂度时O(logn) 那么时间复杂度为O(nlogn) 成功减少了时间复杂度。

 

另:有储存下标来删除滑动窗口的做法。文章来源地址https://www.toymoban.com/news/detail-760076.html

到了这里,关于【滑动窗口最值】滑动窗口的最值的一种方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Win11 预览体验计划空白无显示的一种解决方案

    某一天你心血来潮,打算参与Win11 预览体验计划,但体验计划页面显示“Your PC does not meet the minimum hardware requirements for Windows11…”,经过查询网上经验并一番操作后,预览体验计划干脆什么都不显示了,一片空白: 此时的一种解决思路: 根据你想进入的预览体验计划通道,

    2024年02月05日
    浏览(69)
  • VMware 虚拟机占用磁盘空间过大的一种解决方案

    在使用VMware虚拟机的过程中,VM会自动扩大虚拟磁盘的占用空间。发现无论是VM自带的碎片整理还是压缩,这两个操作都无法明显减少虚拟机占用空间。 现在找到一种方法可以做到这点( 可能只适用于VM workstation pro,并未测试过普通版本 ),下面是方法的整理 1.正常关闭虚拟

    2024年02月13日
    浏览(87)
  • 数学建模--退火算法求解最值的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月09日
    浏览(42)
  • 【Default config not found for ApplicationConfig】的一种解决方案

                                                                             💧 记录一下今天遇到的 b u g color{#FF1493}{记录一下今天遇到的bug} 记录一下今天遇到的 b ug 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞

    2024年02月16日
    浏览(50)
  • ubuntu20.04安装NVIDIA显卡以及重启黑屏的一种解决方案

    问题描述: 安装ubuntu20.04后,安装微软浏览器edge会出现打不开、卡顿等情况,而且不支持扩展屏幕 原因分析:考虑是ubuntu自带的gdm3显卡驱动不兼容导致 解决方案:网上有很多使用终端安装NVIDIA显卡的教程,亲自踩了好多坑后,找到一种简单的安装方案: 首先在终端输入:

    2024年02月04日
    浏览(60)
  • 【linux】记录archlinux软件包更新后lualatex无法编译的一种解决方案

    操作系统:archlinux Kernel: 6.4.11-arch2-1 包管理器:pacman 日期:2023.08.25 今天一如往常地进行软件包更新: 随后,在使用luelatex对我的论文(latex)进行编译时,无法编译。想到在软件更新前还能编译,更新后就无法编译,必然是软件包版本问题。在命令行运行lualatex报错: 所以

    2024年02月11日
    浏览(46)
  • Spring@Scheduled定时任务接入XXL-JOB的一种方案(基于SC Gateway)

    目前在职的公司,维护着Spring Cloud分布式微服务项目有25+个。其中有10个左右微服务都写有定时任务逻辑,采用Spring @Scheduled这种方式。 Spring @Scheduled定时任务的缺点: 不支持集群:为避免重复执行,需引入分布式锁 死板不灵活:不支持手动执行,单次执行,补偿执行,修改

    2024年02月11日
    浏览(48)
  • gmpy2与一些python库在vscode下没有自动补全的一种缓解方案

    经过一定的研究,该问题的原因初步判断是gmpy2这个库天生没有把补全的函数doc说明附在pip包中。且因gmpy2是由C编译而来,以dll或so的形式作为动态链接库给python调用,这意味着无法从源码薅到可用的源码注释。 接下来先讲解决方案,再简单进行问题分析说明。 省流:从pyc

    2024年01月20日
    浏览(40)
  • 【GitHub】Failed to connect to github.com port 443 的一种解决方案

    Failed to connect to github.com port 443 的一种解决方案 GitHub 是我们最常用的远程仓库之一。由于这个Hub的网络、英文难懂/翻译插件偶尔不通顺 等等杂七杂八的问题,时常会干扰我们的使用。 本文记录 个人在使用GitHub过程中 遇到的报 Failed to connect to github.com port 443 的解决过程及解

    2024年02月16日
    浏览(54)
  • 【Dijkstra】最短路算法的一种

    首先,本文默认读者基本熟悉Dijkstra基本原理 DIjkstra是单源最短路的一种算法。使用数组d[i]来储存结点i到源点s的最短路径长度,每次更新d[i]数组后,d[i]中最小的一定是一条最短路径长度。也就是说每次更新后都能找到一条最短路径,以下给出证明: 假设d[]数组中当前最小

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包