首页
学习
活动
专区
圈层
工具
发布

滑动窗口(C++,Java)

滑动窗口 给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。...3 5 3] 6 7 -3 5 1 3 -1 -3 [5 3 6] 7 3 6 1 3 -1 -3 5 [3 6 7] 3 7 你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。...第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。 第二行有 n 个整数,代表数组的具体数值。 同行数据之间用空格隔开。 输出格式 输出包含两个。...第一行输出,从左至右,每个位置滑动窗口中的最小值。 第二行输出,从左至右,每个位置滑动窗口中的最大值。...输入样例: 8 3 1 3 -1 -3 5 3 6 7 输出样例: -1 -3 -3 -3 3 3 3 3 5 5 6 7 提交代码 C++ #include using

52100

【C++】滑动窗口算法

上一期笔记是关于C++的双指针算法,没看的同学可以过去看看: 【C++】双指针算法-CSDN博客 https://blog.csdn.net/hsy1603914691/article/details...滑动窗口算法的本质是双指针算法+单调性。一个单向快慢双指针,那么快指针到慢指针之间形成的区间就像一个窗口,随着快慢指针不断的移动,这个区间就如一个滑动的窗口。...2. right指针,进窗口指针,直到right指针移出窗口,循环才结束。 3. left指针,出窗口指针,当right指针移动到满足情况时,left指针开始移动,直到不再满足情况。 4....[left,right]这段区间就是一个窗口,随着指针的移动而滑动。 5. 滑动窗口算法的时间复杂度是O=(n)。 例题 1. leetcode-209题: 209.

29610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【c++算法篇】滑动窗口

    持续这个过程,有序地移动 left 和 right 指针,直到滑动窗口穷尽了整个序列的所有可能的连续元素集 一个常见的滑动窗口问题示例是找出一个数组中和至少为 target 的最短连续子数组...,在这样的问题中,滑动窗口技术能够有效地找到解决方法,同时保证时间复杂度最少。...这扩大了当前的滑动窗口,包括了 right 指向的新元素 出现滑动窗口中的和大于等于 target 时,进入内层 while 循环。在内层循环中: a....使用滑动窗口,并在窗口内部跟踪了字符的出现情况。具体思路: hash 数组用来维护每个 ASCII 字符在当前考虑的子串(滑动窗口)中的出现次数。它被初始化为0。...p 中的频率 当滑动窗口的长度超过字符串 p 的长度时,必须移动窗口的左边界。

    63800

    【C++】算法集锦(7)滑动窗口

    ---- 这是暴力解法吧,不知道为什么他们要叫这种解法为滑动窗口,还给出了不低的难度系数。。...如果看不懂我上面的表述,可以看图:(一图胜千言) ---- 通过归纳,我们可以勾勒出滑动窗口法的大体框架(只是基本框架,根据不同的问题应适当变动,重在把握精神) 初始化窗口端点L,R,一般L为0,R为...需要更新状态 L += 1 if 状态满足条件: 可选的更新最优值的位置 else: # 一旦窗口所在区间不再满足条件即跳出...思路: 这道题主要用到思路是:滑动窗口 什么是滑动窗口?...其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列! 如何移动?

    1.1K10

    【C++例题 训练】滑动窗口(总结&&例题)

    本篇主要总结关于滑动窗口的相关做题技巧与注意事项,滑动窗口也用到了双指针的内容,可以参考这篇文章【算法/学习】双指针-CSDN博客 ,本篇主要用于在了解滑动窗口的构造后,快速掌握滑动窗口的做题技巧与做题模板...,便于以后复习参阅 定义变量:确定需要维护的变量:数之和,最大最小长度,哈希表等 滑动窗口:确定滑动窗口的左右边界,开始滑动窗口 合法更新:在滑动窗口有效的情况下,合法的更新需要维护的变量 非法更新(二次更新...):在滑动窗口无效或者即将无效的情况下,更新维护的变量,并且收缩滑动窗口的左边界 非法更新的两种情况: 滑动窗口的长度是固定的!!!...使用 if条件来更新 滑动窗口的长度是可变的!!! 使用 while / for 条件来更新 返回与得到答案 经典例题如下 定长滑动窗口 1....由于需要遍历的子串长度均为 n,我们可以使用一个固定长度为 n 的滑动窗口来维护 cnt2​: 滑动窗口每向右滑动一次,就多统计一次进入窗口的字符,少统计一次离开窗口的字符。

    36310

    滑动窗口

    由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。参见滑动窗口如何根据网络拥塞发送数据仿真视频。...滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。...TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。...窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。...发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

    56210

    滑动窗口入门

    既然是一个类型的题目,我们首先来了解下滑动窗口的2个概念: 滑动:指一个区间往一个方向进行移动,本题中使用从左到右的方式进行滑动。...窗口:也就是一个区间,这个区间可能会增大,也可能会缩小,也可能是固定的。在本题中,我们可以使用队列来表示窗口,这个队列可大可小,要求其最大值。 但是光有这两个概念根本解决不了本题,我们还缺什么呢?...显然,光有滑动窗口是不够的,我们还需要一个数据结构来记录队列里面是否存在某个字符,于是我们加入辅助的结构set。...2 重复了要删除前字母,删除前字母会将窗口左边界右移。 3 新字母会让窗口右边界右移一位。...C++代码 class Solution { public: int lengthOfLongestSubstring(string s) { if (s.size()

    77550

    TCPIP滑动窗口

    剩余的缓冲区空间的大小被称为窗口( w i n d o w) ,指出窗口大小的通知称为窗口通告(window advertisement) 。接收方在发送的每一确认中都含有一个窗口通告。  ...发送方收到一个零窗口通告时,必须停止发送,直到接收方重新通告一个正的窗口。 TCP的特点之一是提供体积可变的滑动窗口机制,支持端到端的流量控制。...TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。...调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。     TCP的窗口机制和确认保证了数据传输的可靠性和流量控制。...TCP/IP中滑动窗口的意义 1.在不可靠链路上可靠地传输帧(核心功能) 2.用于保持帧的传输顺序 3.它有时支持流量控制,这是一种接收方能够控制发送方的一种反馈机制

    1.7K50

    滑动窗口协议

    在计算机网络中实现“流水线技术”的方法是“滑动窗口协议”。 GBN GBN协议(回退N步),它允许发送多个分组而不需要等待确认。但它受限制于窗口的大小N。 ? GBN协议也常被成为滑动窗口协议。...在GBN协议中,发送方首先检查窗口大小是否是满的,如果没有满,那么就产生一个分组并将其发送,并且同时更新变量。如果窗口已经满了,那么发送方给上层指出已满。然后上层会等一会再来试。...发送方收到ACK,如果该分组序号在窗口内,则SR标记该分组为已接受。如果该分组序号等于窗口起始位置序号,那么该窗口移动到具有最小序号的未确认分组处,然后发送该窗口内可发送但未发送的分组。...接收方此时也拥有一个窗口,如果分组序号在该窗口范围内,并且以前没收到过,那么缓存该分组,回复一个ACK给发送方。...因此窗口的大小和序号之间的关系必须是合理的。 ? Ns是发送方窗口大小,Nr是接收方窗口大小,k是序号的位数。

    1.5K20

    滑动窗口协议

    为了完成流量控制,TCP使用滑动窗口协议,使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。...这个窗口覆盖了缓存的一部分,在缓存中的字节是从应用进程传送来的,在这个窗口中的字节就是可以发送而不必考虑确认的。这个想象的窗口有两个边沿:一个在左,一个在右。...这个窗口叫做滑动窗口,因为左沿和右沿都可以滑动。 ?                            ...右沿窗口向右移动表示展开窗口,说明允许从缓存中发送更多新的字节;   左沿窗口向右移动表示合拢窗口,说明某些字节已经被确认了,发送端不必再担心它们。 1....发送窗口中相关的有四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之中)、允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不允许发送的数据;

    1.1K110

    滑动窗口详解

    滑动窗口其实也就是之前介绍的同向双指针 步骤: 定义 left = 0, right = 0 进窗口 判断 出窗口 更新结果(更新结果的步骤根据具体题目中的要求进行) 1....找到字符串中所有字母异位词 暴力解法:创建两个哈希表,然后把字符串p里面的每个字符存里面,接着遍历枚举所有s里面的和字符串p长度相等的子串,再把子串也存到哈希表中,对比两个哈希表中的值是否相等 滑动窗口优化...:在枚举所有组合的过程中发现,因为需要维护子串的长度,所以如果right向右移动,left也要向右 移动,并且,存放到哈希表中的数据只是受到了left和right两个位置的影响,所以就可以使用滑动窗口进行枚举...,具体的次数根据给出的字符串数组中的字符串长度来看 注意,每一次使用滑动窗口都要重新创建一个哈希表 在更新cnt的时候,要注意此时最开始的字符串可能不在hash1中,直接调get方法会空指针异常 class...最小覆盖子串 暴力解法和上面的几题都很相似,直接来看使用滑动窗口优化之后的版本 思路:使用同向双指针维护一个窗口,使窗口内的子串涵盖字符串 t 所有字符,然后让left指针右移,此时会出现两种情况,一种是第一个和字符串

    35910

    window滑动窗口

    Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。...比如下图中,就是对每三秒钟的数据执行一次滑动窗口计算,这3秒内的3个RDD会被聚合起来进行处理,然后过了两秒钟,又会对最近三秒内的数据执行滑动窗口计算。...所以每个滑动窗口操作,都必须指定两个参数,窗口长度以及滑动间隔,而且这两个参数值都必须是batch间隔的整数倍。...(Spark Streaming对滑动窗口的支持,是比Storm更加完善和强大的) 1.png 1.png 案例:热点搜索词滑动统计,每隔10秒钟,统计最近60秒钟的搜索词的搜索频次,并打印出排名最靠前的...​​// 第二个参数,是窗口长度,这里是60秒 ​​// 第三个参数,是滑动间隔,这里是10秒 ​​// 也就是说,每隔10秒钟,将最近60秒的数据,作为一个窗口,进行内部的RDD的聚合,然后统一对一个

    1.1K10

    【算法】滑动窗口

    在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。这样的操作在面对极大的数据量是,效率极低。...而滑动窗口法是维护两个指针来进行操作,通常情况下时间复杂度为O(N)。...那么我们可以试着用滑动窗口的方法来看看。 滑动窗口的方法通过一个for循环来达到目的,那问题又来了,for循环表示的是窗口的起始位置,还是终止位置?...以题目中的数组nums=[2,3,1,2,4,3],目标和target=7为例,来模拟一下滑动窗口的运行过程: 根据子序列和的大小不断调整滑动窗口的大小,当和小于target时,end++;当和大于等于...0:result; } 水果成篮 这个题目的大致意思就是要使得窗口里面只有两种数并且长度最长,可以使用滑动窗口来解决。

    52610
    领券