专题二 -滑动窗口 - leetcode 209. 长度最小的子数组 | 中等难度

leetcode 209. 长度最小的子数组

  • leetcode 209. 长度最小的子数组 | 中等难度
    • 1. 题目详情
      • 1. 原题链接
      • 2. 基础框架
    • 2. 解题思路
      • 1. 题目分析
      • 2. 算法原理
      • 3. 时间复杂度
    • 3. 代码实现
    • 4. 知识与收获

在这里插入图片描述

leetcode 209. 长度最小的子数组 | 中等难度

1. 题目详情

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小连续子数组[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:
输入:target = 4, nums = [1,4,4]
输出:1

示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105

进阶:
如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

1. 原题链接

leetcode 209. 长度最小的子数组

2. 基础框架

● Cpp代码框架

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {}
};

2. 解题思路

1. 题目分析

( 1 ) (1) (1) 本题数组nums都是正整数target也是正整数。要求找出其中大于等于target的最短连续子数组(序列)。

( 2 ) (2) (2) 暴力遍历算法是我们首先想到的方法,枚举出所有的可能情况,找出符合题目的结果。时间复杂度 O ( n 2 ) O(n^2) O(n2)

3 ) 3) 3 在暴力遍历时先定位一个位置left,从这个位置left开始,向右依次遍历所有元素。
假设在某个位置j满足了连续子数组大于等于target的条件,那么right之后的所有位置都没有必要再遍历了,因为数组的元素全是正整数,连续子数组的和sum一定是增大的,但是连续子数组的长度len也增大了,而题目中是要找最短的。所以i位置相当于已经判断完毕,可以直接判断以left+1位置为起始的连续子数组的是否满足题意了。

4 ) 4) 4 优化之法就在隐藏在暴力解法之内:无需重新从left+1位置开始遍历,直至right计算连续子数组的和,而是sum减去left位置的元素就得到了从left+1right的连续子数组的和。
这里面隐藏的规律是:

  1. 单调性:从left开始的连续子数组的和sum一定是增大的,长度len一定是增大的;
  2. leftright指针(或者说是下标)移动的方向是同向的,且不会回退到已经移动的位置。
    而上述所说的优化,即同向双指针,又形象的称为滑动窗口。指针leftright分别相当于滑动窗口的左边界和右边界,滑动窗口内的所有元素的特点就是连续且长度最短且之和sum大于target
    在这里插入图片描述

2. 算法原理

( 1 ) (1) (1) 初始化
左右边界left=0,right=0
( 2 ) (2) (2) 进窗口
每次进入循环,都让sum+=nums[right],即让新元素进入窗口。

( 3 ) (3) (3) 判断条件
如果sum < target,即leftright范围内所有元素的和小于目标值,此时需要继续让新元素进窗口,即right++
如果sum >= target,即窗口内所有元素的和大于等于目标值;

( 4 ) (4) (4) 更新结果
sum >= target时,连续子数组的和满足了条件,即得到了一个结果长度curlen = right - left + 1,需要把得到的结果长度curlen与当前的最短长度minlen取得最短的更新minlen的值。

( 5 ) (5) (5) 出窗口
sum >= target时,以left为起点的连续子数组的和到right位置就已经满足题意了,right后的所有元素没有必要判断了,故让当前left位置元素出窗口,即sum-=[left]且left右移left++;之后返回第三步的判断条件处,继续判断sumtarget的关系,直到满足sum<target时结束判断,然后进入下一次循环。

( 6 ) (6) (6) 滑动窗口有着基本的解题思路,上述的第四步更新结果不一定是在判断条件满足之后才更新的(本题是这样),这与具体的题目要求相关。也可能是在进入循环且判断条件之前就可以更新结果,也可能是在结束整个循环后才更新结果(全部结束时)。

3. 时间复杂度

O ( n ) O(n) O(n)

只看代码来说,也许你会认为时间复杂度是 O ( n 2 ) O(n^2) O(n2),其实这并不正确。在我们对滑动窗口进行分析时,leftright同向移动且不回退,最差的情况是left走到nright走到n,二者是相加的关系,即时间复杂度是O(n)

3. 代码实现

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int minlen = INT_MAX;int l =0, r = 0;int sum = 0;while(r < nums.size()){sum += nums[r];// 1.进窗口while(sum >= target){// 2.判断minlen = min(minlen, r - l + 1);// 4.更新结果sum -= nums[l];// 3.出窗口l++;}r++;}return minlen == INT_MAX ? 0 : minlen;}
};

4. 知识与收获

( 1 ) (1) (1) 滑动窗口(同向双指针)本质就是基于求解过程中隐藏的单调性特点,帮助我们省去了众多无效的判断。
( 2 ) (2) (2) 每一次循环都会让新元素进入窗口,窗口内元素的和也增加;
( 3 ) (3) (3) 在旧元素从左侧出窗口时是循环出去的方式,因为一次只会出一个元素,而出元素之后的和可能还是大于等于目标值;


T h e The The E n d End End

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

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

相关文章

Android14音频进阶:AudioTrack如何巧妙衔接AudioFlinger(五十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

人工智能迷惑行为大赏!

目录 人工智能迷惑行为大赏 一&#xff1a;人工智能的“幽默”瞬间 1. 图像识别出现AI的极限 2. 小批量梯度下降优化器 3. 智能聊天机器人的冰雹问题 4. 大语言模型-3经典语录 二&#xff1a;技术原理探究 1. 深度学习 2. 机器学习 3. 自然语言处理 4. 计算机视觉 三…

博士推荐 | 拥有10多年纺织工程经验,纤维与聚合物科学博士

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

什么是架构?架构设计原则是哪些?什么是设计模式?设计模式有哪些?

什么是架构?架构设计原则是哪些?什么是设计模式?设计模式有哪些? 架构的本质 架构本身是一种抽象的、来自建筑学的体系结构,其在企业及IT系统中被广泛应用。 架构的本质是对事物复杂性的管理,是对一个企业、一个公司、一个系统复杂的内部关系进行结构化、体系化的抽象,…

骨传导游泳耳机哪个牌子好?四款实力扛鼎的游泳耳机推荐

游泳是一项全身性的运动&#xff0c;能够有效锻炼身体、释放压力。然而&#xff0c;在水下欣赏音乐却成为了一项难题。普通的耳机在水中无法使用&#xff0c;而骨传导技术的出现&#xff0c;让游泳与音乐完美结合。今天&#xff0c;我们将为大家推荐四款超强的的骨传导游泳耳机…

分享一个国内可用的AIGC网站,PC/手机端通用|免费无限制,支持Claude3 Claude2

背景 AIGC作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个AI爱好者&#xff0c;翻遍了各大基于AIGC的网站&#xff0c;终于找到一个免费&#xff01;免登陆&#xff01;手机电脑通用&#xff01;国内可直接对话的AIGC&am…

EasyRecovery恢复电脑丢失数据怎么样?

电脑是我们大家熟悉并且常用的数据存储设备&#xff0c;也是综合性非常强的数据处理设备。对于电脑设备来讲&#xff0c;最主要的数据存储介质是硬盘&#xff0c;电脑硬盘被划分成多个分区&#xff0c;在电脑上表现为C盘&#xff0c;E盘等&#xff0c;用来保存系统文件以及其他…

记OnlyOffice的两个大坑

开发版&#xff0c;容器部署&#xff0c;试用许可已安装。 word&#xff0c;ppt&#xff0c;excel均能正常浏览。 自带的下载菜单按钮能用。 但config里自定义的downloadAs方法却不一而足。 word能正常下载&#xff0c;excel和ppt都不行。 仔细比对调试了代码。发现app.js…

yolov5-v6.0详细解读

yolov5-v6.0详细解读 一、yolov5版本介绍二、网络结构2.1 Backbone特征提取部分2.1.1 ConvBNSiLU模块2.1.2 C3模块2.1.2.1 BottleNeck模块 2.1.3 SPPF模块 2.2 Neck特征融合部分2.2.1 FPN2.2.2 PANet 2.3Head模块 三、目标框回归3.1 yolo标注格式3.2 yolov4目标回归框3.3 yolov…

《行业指标体系白皮书》重磅发布,剖析指标建设困境,构建前瞻性的指标体系(附下载)

正处于企业指标建设过程中的你&#xff0c;是否经常遇到这样的问题&#xff1a; • 各个部门独立建设信息系统&#xff0c;由此产生的指标定义和计算方式各异&#xff0c;导致管理层无法快速准确地掌握整体业务运行状况 • 缺乏对指标的统一管理和规范&#xff0c;产生重复的指…

IO复用之select

目录 一.select方法介绍 2.1 select 系统调用的原型 2.2 集合的数据结构 2.2.1 fd_set 结构如下: 2.2.2 关于集合fd_set的解析 2.3 select第一个参数 2.4 select方法之超时时间timeout 2.5 select方法的用法简述及返回值 2.6 如何检测集合中有哪些描述符有事件就绪 三…

【建议收藏】大气颗粒物与VOCs PMF源解析

查看原文>>>最新大气颗粒物与VOCs PMF源解析实践技术应用 目前&#xff0c;大气颗粒物和臭氧污染成为我国亟待解决的环境问题。颗粒物和臭氧污染不仅对气候和环境有重要影响&#xff0c;而且对人体健康有严重损害。而臭氧的前体物之一为挥发性有机物&#xff08;VOCs&…

Orange3数据预处理(离散化组件)

离散化&#xff1a;将数值属性转换为分类属性。 输出 数据&#xff1a;具有离散化值的数据集 设置离散化的默认方法。 选择变量以为每个变量设置特定的离散化方法。将鼠标悬停在变量上显示区间。 离散化方法Keep numeric(保持数值)&#xff1a;保持变量不变。Remove (移除)&a…

罐头鱼AI短视频矩阵获客|AI视频批量生成

罐头鱼AI传单功能操作说明&#xff0c;智能化提升您的视频营销效率&#xff01; 在这个信息爆炸的时代&#xff0c;短视频已成为企业营销的重要方式之一。而为了更高效地进行视频营销&#xff0c;罐头鱼AI传单功能应运而生&#xff0c;为您提供全方位的视频管理和发布服务。 首…

【最全最详细】微信第三方平台开发 —— 接收公众号事件/消息

文章目录 1. 整体流程2. 成为服务商2.1. 首先打开微信开放平台&#xff0c;注册并登录你的账号2.2. 进行开发者资质认证2.3. 创建第三方平台并提交审核 3. 搭建第三方平台后端服务3.1. 管理员设置 和 权限集设置3.2. 开发资料设置3.3. 进行商家授权操作3.3.0. 加密解密操作3.3.…

新零售SaaS架构:什么是线上商城系统?

零售商家为什么要建设线上商城 传统的实体门店服务范围有限&#xff0c;只能吸引周边500米内的消费者。因此&#xff0c;如何拓展服务范围&#xff0c;吸引更多消费者到店&#xff0c;成为了店家迫切需要解决的问题。 缺乏忠实顾客&#xff0c;客户基础不稳&#xff0c;往往是…

IEEE802.11v协议介绍

IEEE802.11v协议简介 协议全称:无线网络管理(Wireless Network Management) 批准日期:2011年2月 协议状态:并入802.11-2012 协议别名:BSS过渡管理 主要功能 支持AP和STA间交换:关于RF环境和拓扑状态的信息,以协助STA进行漫游决策支持STA之间交换:关于RF环境状态的信…

【Python】random库

专栏文章索引&#xff1a;Python 原文章&#xff1a;Python中random函数用法整理_python random-CSDN博客 目录 1.random.random() 2.random.uniform(a, b) 3.random.randint(a, b) 4.random.randrange([start], stop[, step]) 5. random.choice() 6. random.shuffle(x[,…

四川尚熠电子商务有限公司领航抖音电商新纪元

随着互联网的飞速发展&#xff0c;电子商务已经成为现代商业的重要组成部分。在这个变革的时代&#xff0c;四川尚熠电子商务有限公司凭借其敏锐的市场洞察力和创新精神&#xff0c;专注于抖音电商服务&#xff0c;为广大品牌商家提供了一站式的电商解决方案&#xff0c;成为行…

从菜鸟到大师!年薪20W的c++ QT开发工程师需要懂哪些技术?

如今Qt的知识也变得非常广泛和复杂&#xff0c;学习起来同样具有一定的挑战。对于Qt从业者来说&#xff0c;有两个主要层面&#xff1a;一个是深入理解Qt框架和基础知识&#xff0c;另一个是具备丰富的工程经验。 还不熟悉的朋友&#xff0c;这里可以先领取一份Qt开发必备技术…