【优选算法】滑动窗口 {何时使用滑动窗口?如何使用滑动窗口?如何确定更新结果的时机?滑动窗口是如何提高效率的?相关编程题解析}

news2024/11/17 9:29:27

一、经验总结

何时使用滑动窗口?
在使用暴力解法解题时,发现可以将其优化为同向双指针,既可以使用滑动窗口。

如何使用滑动窗口?
1. 定义窗口控制变量n,进窗口,判断,出窗口都需要操作窗口控制变量。
2. 定义窗口的左右端点,left = 0, right = 0;
3. 进窗口: ++n;
4. 判断:while(n > k)
5. 出窗口: --n;
6. 在适当的时机更新结果。

如何确定更新结果的时机?
* 可以选择跟随进窗口更新结果(判断外),或跟随出窗口更新结果(判断内)。
* 借助示例模拟滑动窗口算法的执行过程:如果是在出窗口时刚好满足结果的形成条件则跟随出窗口,如果是在出窗口时刚好不满足结果的形成条件则跟随进窗口。

滑动窗口是如何提高效率的?
利用单调性规避了许多没有必要的枚举行为,单趟滑动窗口的时间复杂度O(n)。


二、相关编程题

2.1 长度最小的子数组

题目链接:209. 长度最小的子数组

算法原理:
在这里插入图片描述

题解:209. 长度最小的子数组(滑动窗口)

最值问题:求最小值应该将变量初始化为最大(INT_MAX),求最大值应该将变量初始化为最小(0或INT_MIN)。


2.2 无重复字符的最长子串

题目链接:3. 无重复字符的最长子串

算法原理:
在这里插入图片描述

题解:3. 无重复字符的最长子串(滑动窗口,哈希表)

哈希数组:

  1. 如果使用哈希表统计的是普通ascii字符的出现频次,则可以使用一个大小为128的数组充当哈希表,效率更高。
  2. 一定要记得将数组初始化为空!

2.3 最大连续1的个数 III

题目链接:1004. 最大连续1的个数 III

算法原理:
在这里插入图片描述

题解:1004. 最大连续1的个数 III(滑动窗口)

简化题目:将复杂的题目表述化简为简单易于思考的版本。如可以将此题化简为:找出最长的子数组,0的个数不超过k个


2.4 将 x 减到 0 的最小操作数

题目链接:1658. 将 x 减到 0 的最小操作数

算法原理:
在这里插入图片描述

题解:1658. 将 x 减到 0 的最小操作数(滑动窗口,细节问题)

注意:

  1. 正难则反(化简):可以将此题转化为求元素之和恰好等于sum-x的最长子数组的长度
  2. 尽量使出窗口判断更简单。如,可以判断>=也可以判断>,选择判断>,使思路简明清晰。
  3. 细节处理:写完代码后要注意极端、特殊情况。

2.5 水果成篮

题目链接:904. 水果成篮

算法原理:
在这里插入图片描述

题解:904. 水果成篮(滑动窗口)


2.6 找到字符串中所有字母异位词

题目链接:438. 找到字符串中所有字母异位词

算法原理:
在这里插入图片描述

题解:438. 找到字符串中所有字母异位词(滑动窗口,哈希表)

注意:

  1. 固定长度的滑动窗口:窗口长度就是出窗口的判定条件。窗口元素每退出1个就会进入1个,因此出窗口的判断条件使用if语句即可。
  2. 优化更新结果的判断条件:原本需要遍历比较hash1和hash2中字母的出现频次,使所有字母的出现次数相同,但这样做效率太低。因此定义cnt统计s子串中有效字符的个数,所谓有效字符即在p字符串中出现的字符。又因为是固定长度的滑动窗口,更新结果时仅需判断cnt == len即可。

2.7 串联所有单词的子串

题目链接:30. 串联所有单词的子串

算法原理:
在这里插入图片描述

题解:30. 串联所有单词的子串(滑动窗口,哈希表)


2.8 最小覆盖子串

题目链接:76. 最小覆盖子串

算法原理:
在这里插入图片描述

题解:76. 最小覆盖子串(滑动窗口,哈希表)

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

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

相关文章

天软特色因子看板 (2024.01 第7期)

该因子看板跟踪天软特色因子A04001(当日趋势强度),该因子为反映股价走势趋势强弱,用以反映股价走势趋势强弱,abs(值)越接近1,趋势 性越强,符号代表涨跌方向。 今日为该因子跟踪第7期,跟踪其在SW801050 (申万…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…

机器学习根据金标准标记数据-九五小庞

根据金标准标记数据是一种在机器学习和数据科学中常见的操作,主要用于评估分类模型的性能。其基本步骤如下: 收集数据:首先需要收集相关领域的原始数据,这些数据通常来自不同的来源和渠道。数据清洗和预处理:在这一步…

常见的限流算法

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 天下武学出同源 正所谓天下武学殊途同归&#xff…

怎么批量重命名图片?分享3个高效方法!

怎么批量重命名图片?在日常生活中,将图片批量重命名是一项非常实用的操作。有时候我们拍摄或收集了很多图片,需要对其进行整理和归类。通过批量重命名,我们可以快速为图片添加序号、日期或其他标识,使其更有条理。此外…

new mars3d.layer.GeoJsonLayer({实现图标点billboard贴模型聚合效果

说明: 1.【mars3d】的依赖库cesium本身是不支持贴地/贴模型操作的 2.sdk内部异步计算了数据的贴地/高度值之后,更新到图层上实现贴地/贴模型效果的 3.相关的示例链接: 1.功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 4.相关的计算…

Java基础 - 黑马

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 知…

构建搜索引擎,而不是向量数据库

英文原文地址:Build a search engine, not a vector DB 构建搜索引擎,而不是矢量数据库 2023 年 12 月 19 日 在过去12个月里,向量数据库初创公司数量激增。我并不是来讨论其中任何一个的具体设计权衡。相反,我想回顾一下向量数…

斯坦福CS231n学习笔记:DL与CV教程 (1) | 引言与知识基础

前言 📚 笔记专栏:斯坦福CS231N:面向视觉识别的卷积神经网络(23)🔗 课程链接:https://www.bilibili.com/video/BV1xV411R7i5💻 CS231n: 深度学习计算机视觉(2017&#xf…

设计3题目:各种排序算法及性能分析

1、设计3目的 掌握各种内排序算法设计及其执行绝对时间,并对其时间性能进行比较。 2、设计3正文 2.1 实验内容 内容:编写一个程序,随机产生n个1-99的正整数序列,分别采用直接插入排序、折半插入排序、希尔排序、冒泡排序、快速…

什么是MongoDB

概念: MongoDB 是一个文档数据库(以 JSON 为数据模型),由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中…

白光LED驱动芯片的典型应用电路

小型白光LED驱动器LM2751 LM2751是美国国家半导体(NS)公司推出的一款小型白光LED驱动器,采用10PINLLP无铅封装,内置固定频率的电荷泵,在输入电压为2.8V~5.5V的情况下,可稳压输出4.5V或5.0V电压…

【树莓派】网线远程连接电脑和树莓派,实现SSH连接

目录 1、硬件连接; 2、电脑端: 3、查找树莓派的IP地址 4、开启树莓派的SSH接口 5、putty 6、命令行 参考文章 通过网线连接笔记本与树莓派 开启SSH和VNC功能 无显示器安装树莓派 实现:打开putty输入树莓派地址使用ssh方式登陆&…

【XR806开发板试用】单总线协议驱动DHT11温湿度传感器

1.昨天刚收到极速社区寄来的全志XR806开发板,之前用过很多全志的SOC芯片,但是像这种无线芯片还是第一次用。这次打算使用XR806芯片驱动一下DHT11温湿度传感器。 2.代码如下: #include "common/framework/platform_init.h" #inclu…

【计算机网络】TCP原理 | 可靠性机制分析(四)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 这里写目录标题 &#x1…

软信天成:数据安全管理解决方案分享

近年来,随着数据环境日趋复杂多变和潜在的数据隐私泄露风险潜伏,如何确保企业数据安全已成为众多企业亟待面对与妥善处理的重要问题。 为了应对这一严峻的现实挑战,软信天成凭借专业的知识体系和丰富的实战经验积累,总结出了一套…

【web服务搭建实验】之nginx基础学习

目录 一、nginx的简介二、nginx安装实验虚拟主机的配置web服务器的主流实现方式-LAMP和LNMP 一、nginx的简介 Nginx是一款轻量级HTTP服务器,同时也是代理邮箱服务器,具备反向代理,通用代理的功能。支持多个系统,和不同操作系统。…

如何注释 PDF?注释PDF文件方法详情介绍

大多数使用 PDF 文档的用户都熟悉处理这种格式的文件时出现的困难。有些人仍然认为注释 PDF 的唯一方法是打印文档,使用笔或荧光笔然后扫描回来。 您可能需要向 PDF 添加注释、添加注释、覆盖一些文本或几何对象。经理、部门负责人在编辑公司内的合同、订单、发票或…

lvgl简介

LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统,可以在不同的操作系统、微控制器和图形加速器上运行。LVGL的核心…

power shell 有哪些常用命令?

PowerShell是一种命令行外壳和脚本语言,它基于.NET Framework并专为系统管理员设计。下面是一些常用的PowerShell命令: Get-Process:获取运行的进程列表。Get-Service:获取运行的服务列表。Get-EventLog:获取事件日志…