首页 > 其他分享 >滑动窗口

滑动窗口

时间:2023-07-05 14:25:11浏览次数:35  
标签:窗口 队列 tt 元素 hh 最小值 滑动

1. 关于常用方法的介绍,在一个区间内寻找最大值或者最小值。

题目链接:154. 滑动窗口 - AcWing题库

举例,在一个长度为s数组中,窗口的大小为k,窗口从最左侧开始进行移动,输出窗口中最大和最小的两个元素。

2. 思考,在窗口的移动过程中,不断有旧的元素消失,新的元素进来,即先进先出,符合队列的特征。

从暴力的角度来看,每个窗口中找一遍即可,然而当窗口过大,数组过长时,时间会超时。

3. 分析,数组如下:

4  3  8  7  5  6  , 窗口大小为3。

我们首先来寻找窗口中的最小值。

首先4进入窗口。

接着是3,可以思考一下这个时候。4已经在窗口中了,4 大于 3 ,如果3进入窗口,那么4是否还有存在的必要呢?就是3在4的后面进入,并且3小于4,那么在窗口的移动过程中,4一定会首先滑出窗口。而且,4也没有可能会被当做最小值进行输出,那么,我们可以选择将4扔出。

所以我们可以总结出一下规律,如果要进入的数字比在窗口中的数字要小,就需要将窗口中的这个数字扔出。

结合第二点中的队列特点,即在比较和扔出过后,要进入的数字一定比当前窗口中最近的数字大,所以说,这是一个单调递增的队列,当我们想要求取窗口中的最小值时,只需要判断在“合法”的情况下输出队头元素即可。

4. 接下来我们进行分析什么样的情况下合法。

  (1)不能是空队列。

  (2)我们从第一个元素开始进入,那么我们必须要最少总共进入过一个窗口后才可以进行输出,结合样例即在窗口到达4 3 8的时候才会进行输出。

  (3)我们的窗口在向前滑动,很可能队头却一直停留,因此,必须保证队头在窗口当中。

5. 具体的代码。

 //求最小值
    for (int i = 0; i < n; i ++)
    {
        // 防止溢出
        if (tt >= hh && (i - k) >= q[hh]) hh ++;
        
        while (tt >= hh && e[q[tt]] >= e[i]) tt --;
        q[++ tt] = i;
        
        if (i - k + 1 >= 0) printf("%d ", e[q[hh]]);
    }

 

6. 要寻找最大的元素时,同理,请稍微进行思考一些。

标签:窗口,队列,tt,元素,hh,最小值,滑动
From: https://www.cnblogs.com/481zch/p/17528373.html

相关文章

  • 认识soui4js(第4篇):定义一个窗口类并显示
    soui4js基于soui4设计实现。首先我们看一下soui4中如何定义一个窗口类。soui4最基本的窗口类是SHostWnd和SHostDialog,它需要一个布局xml。假定布局xml在资源包中的位置为:layout:maindlg。那么soui4中定义一个窗口可以是下面的代码(为了演示方便,这里使用SHostDialog):SHostDia......
  • selenium ui自动化遇到切换窗口,点击高级并继续访问的处理方式
    在python自动化中(ui),遇到了一个需要浏览器切换窗口,点击“高级”-“接受风险并继续”的操作,前期在本地编写代码调试时,没有任何问题。切换环境,放到Linux服务中,使用无头模式去运行代码时,发现切换窗口时,总是找不到页面元素,查看截图发现页面为空白,检查两天无果。场景图片,如下图所示,当......
  • 2023-07-03 禁止uniapp之app端上下滑动出现的回弹效果:"app-plus": {"bounce": "none"}
    前言:uni项目打包到app(以Android为例)上运行,上下滑动页面的时候会出现一个半圆,这就是所谓的退弹,如需关闭可在pages.json文件中的globalStyle中添加一下代码即可:"app-plus":{"bounce":"none"}uniapp关于app-plus的更多配置可参考官网:https://uniapp.dcloud.net.cn/colloc......
  • XP中怎样让批处理文件运行后,不关闭dos窗口
    BAT文件最后加一行:pause因为双击运用结束后就关闭界面了======在BAT文件后面加上CMD就行了你看看BAT最后面几行有没有类似EXIT的命令,如果有,删除掉把CMD加上,或在EXIT之前加上,谢谢!!......
  • 全局鼠标左拖动打开后台的软件A窗口右拖动打开后台软件B窗口 (提升效率)
    首先将要打开的软件固定,位置决定下面打开的快捷键,首先Windows系统有这样的你按win+1打开固定的第一个,win+2打开IDEA,以此类推,所以win自带快捷键打开某个软件。如果我们想要鼠标手动实现,假想如果有这么一款软件你可以设置指定的手势模拟指定的快捷键,那我们不就实现了标题所说的吗?......
  • TCP协议的滑动窗口具体是怎样控制流量的?
    目录前言TCP协议概述滑动窗口的原理1发送方的滑动窗口:2接收方的滑动窗口:控制流量的机制1慢启动2拥塞避免3拥塞控制实例演示总结前言TCP协议是互联网中广泛使用的传输层协议之一,用于可靠地传输数据。其中,滑动窗口是TCP协议中用于控制流量和实现可靠传输的重要机制。本文将介......
  • [GPT] 如何让 vue-router 打开新窗口
     在VueRouter中打开新窗口可以通过使用<router-link>组件的target属性来实现。将target属性设置为`"_blank"`将会在新窗口中打开链接。以下是一个示例: html<router-linkto="/example"target="_blank">打开新窗口</router-link> 这将在单击链接时在新窗口中打......
  • a标签图片下载变成窗口打开问题处理
    import{saveAs}from'file-saver'downloadImage(url,fileName){   constvideoList=['mp4','avi','flv','mov']   letname=fileName   consturlTypeList=url.split('.')   c......
  • 使用xmanager打开CentOS7图形化窗口
    1.先安装相应的组件: yum-yinstallxclockxorg-x11-xauth.x86_64xorg-x11-utils2.打开xmanager-passive: 打开后会自动隐藏到任务栏右下角。3.终端中操作,如果切换到其他用户仍要注意环境变量DISPLAY: ~]#exportDISPLAY=192.168.1.107:0.0#IP为安装xmanager的主机 ~]......
  • 滑动窗口最大值
    滑动窗口最大值给你一个整数数组,有一个大小为\(k\)的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的\(k\)个数字.滑动窗口每次只向右移动一位.考虑使用双端队列,队列内存储数组的下标,保证优先队列的队头为当前滑动窗口内最大元素所在数组的......