首页 > 编程语言 >【进阶算法】滑动窗口

【进阶算法】滑动窗口

时间:2023-11-19 19:57:42浏览次数:40  
标签:满足条件 right 窗口 进阶 -- 算法 滑动 指针

一、滑窗思想

滑动窗口,简称滑窗,是快慢指针的一种应用技巧,两个指针之间形成一个窗口,右指针不断扩张,左指针按条件收缩,随着窗口的扩大和缩小找到满足条件的答案。

滑窗分为 2 种:

  • 静态窗口:窗口中的元素个数不变;
  • 动态窗口:窗口中的元素个数随条件变化。

 

二、适用场景

滑动窗口适用于:查找满足一定条件的最长或最短子数组、子字符串。

 

三、滑窗使用思路

3.1 查找最长

-- 左右双指针(L, R)在起始点,R 向右逐位滑动

---- 每次滑动过程中

       如果窗口内元素满足条件,R 增加,扩大窗口,并更新最优结果

       如果窗口内元素不满足条件,L 增加,缩小窗口

-- R 到达结尾

 

3.2 查找最短

-- 左右双指针(L, R)在起始点,R 向右逐位滑动

---- 每次滑动过程中

       如果窗口内元素不满足条件,R 增加,扩大窗口

       如果窗口内元素满足条件,L 增加,缩小窗口,并更新最优结果

-- R 到达结尾

 

3.3 两个重要问题

1. 什么时候扩大窗口,什么时候收缩窗口?

2. 在扩大窗口还是收缩窗口时更新结果?

  -- 获取最长的时候,满足条件扩大窗口、更新结果,不满足条件收缩窗口;

       -- 获取最短的时候,满足条件收缩窗口、更新结果,不满足条件扩大窗口。

 

四、代码框架

int left = 0, right = 0;

while (right < size()) {
    // 移入窗口的元素
    window.add(s[right]);
    // 窗口增大
    right++;
    
    // 如果窗口需要收缩
    while (left < right && window needs shrink) {
        // 移出窗口的元素
        window.remove(s[left]);
        // 缩小窗口
        left++;
    }
}

 

五、练习题目

LeetCode 209. 长度最小的子数组

LeetCode 76. 最小覆盖子串 

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

 

标签:满足条件,right,窗口,进阶,--,算法,滑动,指针
From: https://www.cnblogs.com/luwei0424/p/17842091.html

相关文章

  • 代码随想录算法训练营第十天 | ●28. 实现 strStr() ●459.重复的子字符串 ●字符串
    今日学习的文章链接和视频链接https://programmercarl.com/字符串总结.html#什么是字符串https://programmercarl.com/双指针总结.html#数组篇●28.实现strStr()varstrStr=function(haystack,needle){if(needle.length===0)return0;const......
  • 代码随想录算法训练营第八天 | ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54
    今日学习内容●344.反转字符串varreverseString=function(s){//returns.reverse();for(leti=0,j=s.length-1;i<Math.floor(s.length/2);i++,j--){[s[i],s[j]]=[s[j],s[i]]}returns};●541.反转字符串IIvarre......
  • offline RL | TD3+BC:在最大化 Q advantage 时添加 BC loss 的极简算法
    题目:AMinimalistApproachtoOfflineReinforcementLearning,NeurIPS2021,8775。pdf版本:https://arxiv.org/pdf/2106.06860.pdfhtml版本:https://ar5iv.labs.arxiv.org/html/2106.06860(感觉写的蛮好的)openreview:https://openreview.net/forum?id=Q32U7dzWXpcgithub......
  • 文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题
    二、用go语言,试写出HASH-DELETE的伪代码;修改HASH-INSERT,使之能处理特殊值DELETED。文心一言:首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用空值和大括号{}来表示“DELETED”。下面是哈希表的基本定......
  • 文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题
    二、用go语言,试写出HASH-DELETE的伪代码;修改HASH-INSERT,使之能处理特殊值DELETED。文心一言:首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用空值和大括号{}来表示“DELETED”。下面是哈希表的基本......
  • 大数据应用算法复习笔记
    许我人间一两风,吹散十万八千梦"余幼时即嗜code,家贫,无computer以观,每假借于电脑之家,拆板以刻,计日以还。既加冠,益慕算法之道,又患无cpp,java以游,遂至北理工,观此ppt。当余之读ppt也,负箧曳屣,行无暖气之中教中,穷冬烈风,银杏叶深数尺,面庞皲裂而不知。至舍,四支僵劲不能动,吾自持汤沃灌,以衾......
  • 2022年大数据应用算法期末考试
    1.请简要回答为什么需要设计可合并的Sketch算法?可合并的Sketch算法主要是用于什么场景?OnlysketchstructuremovesbetweenlocationsSufficestospecifymergingtwosketchesDistributeddata/parallelizecomputation可合并的Sketch算法是为了解决大规模数据流处......
  • 算法竞赛进阶指南学习笔记(一)
    前言一共八章基本算法基本数据结构搜索数学知识数据结构进阶动态规划图论综合技巧与实践前置要求:简单熟悉C++这门语言。学习算法,算法的门槛不像AI门槛那么高,每个人皆可学习。正如谚语所说:熟读唐诗三百首,不会作诗也会吟。练习达到3000左右的题量,那你便可轻易Accepted......
  • 【教3妹学编程-算法题】三个无重叠子数组的最大和
    2哥 :3妹,咋啦?一副苦大仇深的样子?3妹:不开心呀不开心,羽生结弦宣布离婚。2哥 :羽生什么?3妹:羽生结弦!2哥 :什么结弦?3妹:羽生结弦!!!2哥:羽生结弦是谁?他离婚关你啥事啊?3妹:你不知道,他是日本著名花滑运动员,前几个月刚宣布结婚,没想到这么快就离了。真是短时间内震惊我两次!2哥 :哎,人家怎......
  • AdaBoost算法解密:从基础到应用的全面解析
    本文全面而深入地探讨了AdaBoost算法,从其基础概念和原理到Python实战应用。文章不仅详细解析了AdaBoost的优缺点,还通过实例展示了如何在Python中实现该算法。关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人......