【滑动窗口】一题讲透滑动窗口!
🚀个人主页:一颗小谷粒
🚀所属专栏:力扣刷题
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~
目录
1.1 题目要求
1.2 算法图解分析
1.3 代码实现
1.4 时间复杂度分析
1.5 算法思想总结
1.1 题目要求
LeetCode.209 是一道非常经典的滑动窗口题目,题目如下:
209. 长度最小的子数组 - 力扣(LeetCode)
如果你不了解滑动窗口的话,那么只能通过暴力来解决,也就是通过两个for循环依次从左到右枚举,这么做的时间复杂度是O(n^2),那么有没有更高效的方法呢?
通过滑动窗口动态地调整子数组的范围,快速找到最优解:
1.2 算法图解分析
式例1:nums = [2,3,1,2,4,3] target = 7
分别定义子数组的左边界 left 和右边界 right ,依次枚举子数组的右端点,也就是right
此时 right = 0 ,子数组的元素和sum = 2,因为不满足sum >= target(7) ,所以继续右移右端点
此时 right = 1 ,子数组的元素和sum = 5,因为不满足sum >= target(7) ,继续右移右端点
直到 right = 3 时 ,子数组的元素和sum = 8,满足sum >= target(7) ,这时我们首先要记录子数组的元素个数res,然后再向右移动左端点,也就是缩小子数组的左边界,再次判断缩小后的子数组元素和sum 是否满足sum >= target(7)。不满足移动右端点,满足则缩小左边界。
当缩小左边界后,子数组的元素和sum = 6,因为不满足sum >= target(7) ,所以继续枚举右端点
继续移动右端点后sum = 10 , 满足sum >= target(7) ,这时我们记录子数组元素个数res,并继续向右移动左端点来缩小子数组的左边界,判断缩小后的子数组元素和sum 是否满足sum >= target(7)。不满足移动右端点,满足则缩小左边界。
缩小后sum = 7,依然满足 sum >= target(7),我们继续上一步操作
此时sum = 6,因为不满足sum >= target(7) ,所移继续右移右端点
sum = 9,缩小左端点
sum = 7 ,缩小左端点
最后 sum = 3,由于右端点移动到了终点,此时跳出循环,返回结果为最小的res
1.3 代码实现
public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int res = n + 1;int sum = 0;int left = 0;//枚举子数组右边界for (int right = 0; right < n; right++) {sum = sum + nums[right];//缩小左边界while (sum - nums[left] >= target) {sum = sum - nums[left];left++;}if (sum >= target) {//保存子数组元素个数res = Math.min(res, right - left + 1);}}return res <= n ? res : 0;}
1.4 时间复杂度分析
子数组的右端点是从左到右枚举的,它是O(n)的,子数组的左端点是不断缩小的,它也是O(n)的;因此这个算法的时间复杂度就是O(n)的。
空间复杂度:O(1)。仅用到若干额外变量。
1.5 算法思想总结
- 初始化窗口的左右边界,通常左边界和右边界都从数据结构的起始位置开始。
- 不断地移动右边界来扩展窗口,直到窗口满足特定条件(例如包含了所有目标元素)。
- 一旦满足条件,就尝试移动左边界来收缩窗口,同时保持条件仍然满足,目的是找到最小的满足条件的窗口大小或者窗口内容。
- 在整个过程中,根据需要记录窗口的状态、大小、元素等信息
刷题总是枯燥痛苦的,但是各位,计算机人是不怕吃苦的,万事开头难,不是看到了希望才去坚持,而是坚持了才有希望!最后由衷地祝愿所有的计算机人在学习的路上一路顺风,我们顶峰相见!博主微信:g2279605572
相关文章:

【滑动窗口】一题讲透滑动窗口!
🚀个人主页:一颗小谷粒 🚀所属专栏:力扣刷题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1.1 题目要求 1.2 算法图解分析 1.3 代码实现 1.4 时间复杂度分析 1.5 算法思想总结 1.1 题目要…...

嵌入式通信原理—SPI总线通信原理与应用
文章目录 SPI 简介基本原理工作模式特点 SPI寻址方式1. 片选(Chip Select, CS)2. 多从设备通信3. 菊花链(Daisy-Chain)模式4. 地址寄存器(应用层) SPI通信过程时钟信号生成(SCLK)数据…...

基于web的 BBS论坛管理系统设计与实现
博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…...
【Scala入门学习】Scala的方法和函数
1. 方法 在scala中的操作符都被当成方法存在,比如说、-、*、/ 12就是1.(2)的调用, 2.0 是doule类型,强调用Int类型的写法为1.(2:Int) 1.1 方法的声明和使用 定义方法的语法: def 方法名([变量:变量类型ÿ…...

【JVM】概述
前言 Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等)构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富&…...

鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
鸿蒙开发笔记整理,方便以后查阅! 由于上班较忙,只能抽空闲暇时间,快速整理更新中。。。 登录页面跳转到我的页面、并传值 效果图 我的设置页面 /*** 我的设置页面*/ import CommonConstants from ./CommonConstants import ItemData from ./ItemData import DataModel fr…...

clip论文阅读(Learning Transferable Visual Models From Natural Language Supervision)
目录 摘要训练pre-train model的过程将pre-train model应用于下游任务应用(待更新) 论文/项目地址:https://github.com/OpenAI/CLIP 提供了clip的pre-trained model的权重,也可安装使用pre-trained model 摘要 使用标签标注的图…...

用于图像分割的协 SMA Transformer:同多注意力转换器 !
在医学图像分割中,基于注意力机制和卷积神经网络的Transformer在提高性能方面起到了重要作用。然而,早期的模型往往在分割小而形状不规则的肿瘤时表现不佳。 为此,作者提出了一种基于SMA架构(Synergistic Multi-Attention…...
lodash中_.difference如何过滤数组
_.difference(array, [values]) 作用: 创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给…...
关于C# 数据库访问 转为 C++ CLI 数据库访问
Db_.cs 与 csharp_db.h功能是一样的。 Db_.cs /**************************************************************************************** 创建时间 :2006年12月19日文件名 :Db_.cs功能 :数据库…...

百度移动刷下拉词工具:快速出下拉词的技术分析
都2024年了,你还在做SEO百度下拉?答案当然是肯定的,虽然百度的搜索流量不如从前,但移动端的流量依然是巨大的!除了百度SEO快排以外,下拉也是一大流量入口,尤其是在移动端搜索的流量越来越大时&a…...
学习笔记-Golang中的Context
文章目录 1、什么是Context2、Context的作用3、Context的解析3.1、Context的源码解析3.2、 context包中实现context接口的四种结构体类型3.2.1、emptyCtx3.2.2、cancelCtx3.2.3、timerCtx3.2.4、valueCtx 4、总结 1、什么是Context Context是 Go 语言中的一个标准库࿰…...

ArrayList 源码解析
ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同…...
libgit2编译
1. 源码下载 libgit2源码下载 2. 编译要求 CMake下载 CMake教程 3. 编译步骤 Prerequisites Make sure CMake on your %PATH% Build Create a build directory beneath the libgit2 source directory, and change into it: mkdir build && cd buildCreate the …...
mac新手入门(快捷键)
系统常用快捷键 基本操作 Command-Z 撤销Command-X 剪切 Command-C 拷贝(Copy) Option Shift Command V 纯文本拷贝 Command-V 粘贴 Command-A 全选(All)Command-S 保存(Save) Command-F 查找࿰…...
curl 的使用详解
curl 是一个非常强大的命令行工具,用于通过各种协议(如 HTTP、HTTPS、FTP 等)传输数据。它广泛应用于测试 API、下载文件、调试网络请求等。 下面是 curl 常用功能的详解及示例: 基本语法 curl [options] [URL]1. 基本请求 发起…...

从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走
随着科技的飞速发展,视频监控技术在社会安全、企业管理、智慧城市构建等领域扮演着越来越重要的角色。一个高效智能的视频监控管理系统不仅能够提升监控效率,还能在预防犯罪、事故预警、数据分析等方面发挥巨大作用。 一、需求分析 在设计视频监控管理…...

CORS漏洞及其防御措施:保护Web应用免受攻击
1. 背景- 什么是CORS? 在当今互联网时代,Web 应用程序的架构日益复杂。一个后端服务可能对应一个前端,也可能与多个前端进行交互。跨站资源共享(CORS)机制在这种复杂的架构中起着关键作用,但如果配置不当&…...

C语言自定义类型结构体(24)
文章目录 前言一、结构体类型的声明结构体回顾结构体的特殊声明结构体的自引用 二、结构体的内存对齐对齐规则为什么存在内存对齐?修改默认对齐数 三、结构体传参四、结构体实现位段什么是位段位段的内存分配位段的跨平台问题位段的应用位段使用的注意事项 总结 前言…...

补题篇--codeforces
传送门:Problem - 1881C - Codeforces 题目大意: 思路: 首先解决这个问题要知道 一个 ( x , y ) 顺时钟旋转 90 , 180 , 270可以得到 ( y , n - x 1 ) , ( n - x 1 , n - y 1 ) ,( n - y …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...