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

news2024/11/19 17:29:36

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.coloradmin.cn/o/1507519.html

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

相关文章

WIN11环境下Git配置SSH Key拉取Gitee仓库代码

Gitee官方配置参考网址&#xff1a; https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE。https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE。 A.生成 SSH 公钥 Windows 用户建议使用 Windows PowerShell 或者 Git…

C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码

1 割线法 割线法用于求方程 f(x) 0 的根。它是从根的两个不同估计 x1 和 x2 开始的。这是一个迭代过程&#xff0c;包括对根的线性插值。如果两个中间值之间的差值小于收敛因子&#xff0c;则迭代停止。 亦称弦截法&#xff0c;又称线性插值法.一种迭代法.指用割线近似曲线求…

【linux】02 :Linux基础命令

1.掌握linux系统的目录结构 linux只有一个顶级目录&#xff0c;称之为&#xff1a;根目录。 windows系统有多个顶级目录&#xff0c;即各个盘符。 2.linux路径的描述方式 /在Linux中的表示&#xff1a;出现在开头表示根目录&#xff0c;出现在后面表示层级关系。 3.什么是命…

官网在线客服系统源码 完全开源可二开 带完整的安装代码包以及搭建教程

在互联网时代&#xff0c;用户对于线上服务的便捷性和高效性要求越来越高。官网在线客服系统作为企业与用户之间实时沟通的工具&#xff0c;不仅能够提高用户满意度&#xff0c;还能够有效促进业务转化。然而&#xff0c;市面上的在线客服系统大多价格昂贵且功能单一&#xff0…

提高Python代码效率:*args与**kwargs的高级应用指南

提高Python代码效率&#xff1a;*args与**kwargs的高级应用指南 引言*args的使用和技巧基本用法示例代码&#xff1a; 结合位置参数和*args使用示例代码&#xff1a; 使用*args传递参数给另一个函数示例代码&#xff1a; 解包列表或元组为函数参数示例代码&#xff1a; 高级技巧…

不同路径 不同路径 II 整数拆分

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。…

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景&#xff1a; 最近在折腾openai&#xff0c;哎&#xff0c;一言难尽&#xff0c;使用的是conda管理python版本的切换&#xff0c;使用jupyter notebook来运行python程序&#xff0c;其实PyCharm也行&#xff0c;但是&#xff0c;…

数据标注专业团队

数据标注服务 在跟一些淘宝、多多商家老板合作后&#xff0c;客户一般付款后&#xff0c;中介是有20%左右的提成&#xff0c;我们主要是希望可以实现数据标注无中介化&#xff0c;有需求可以直接联系数据标注团队直接负责人&#xff0c; 若有意愿请添加添加v&#xff1a;shu_ju…

萨科微所在的功率半导体行业在电子产业中占据重要地位,产品用于电力设备的电能转换和电路控制,是进行电能处理的核心器件

萨科微slkor&#xff08;www.slkormicro.com&#xff09;半导体宋仕强说&#xff0c;萨科微所在的功率半导体行业在电子产业中占据重要地位&#xff0c;产品用于电力设备的电能转换和电路控制&#xff0c;是进行电能处理的核心器件。功率半导体细分产品主要有MOSFET、IGBT、BJT…

恒驰上云规划实施解决方案上线华为云官网

华为云与伙伴共同打造联合解决方案 已成为更多企业的数字化转型利器 1月恒驰上云规划实施解决方案 完成上市宣讲并正式上架华为云官网 恒驰上云规划实施解决方案能力全景图&#xff1a;融合厂商云服务能力&#xff0c;一站式高效云迁移 从深入了解企业的本地IT环境、业务特点…

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

应急响应-Webshell-典型处置案例

网站后台登录页面被篡改 事件背景 在2018年11月29日4时47分&#xff0c;某网站管理员发现网站后台登录页面被篡改&#xff0c;“中招”服务器为windows系统&#xff0c;应采用java语言开发&#xff0c;所使用的中间件为Tomcat。 事件处置 Webshell排查 利用D盾对网站目录进…

【框架学习 | 第四篇】Spring下篇(Spring AOP、Spring 事务、Spring中7种设计模式)

文章目录 4.详讲AOP4.1什么是AOP&#xff1f;4.2为什么叫做面向切面编程&#xff1f;4.3AOP解决的问题4.4AOP应用场景4.5AOP实现方式4.5.1动态代理的实现&#xff08;1&#xff09;JDK代理&#xff08;2&#xff09;CGLB代理&#xff08;3&#xff09;基于接口的动态代理&#…

国产云数据库介绍

这是ren_dong的第35篇原创 前言 目前布局数据库的IT公司越来越多&#xff0c;主要基于 计算场景的延伸和拓展。在不同的计算场景下&#xff0c;所需要的数据库的性能会有所差异。 特别是在 云计算场景下&#xff0c;传统的数据库面临一定挑战。腾讯、阿里巴巴等纷纷开发更加适合…

管理类联考-复试-管理类知识-领导激励理论控制

文章目录 领导领导方式的基本类型领导权变理论情境领导理论管理权力四种员工类型 激励理论归因理论、晕轮效应、假设相似性古典动机理论马斯洛需求理论双因素理论XY理论三种需求理论工作特征模型当代动机理论目标设置理论强化理论公平理论期望理论 控制控制及其必要性PDCA、甘特…

龙年新征程!凌恩生物2月客户文章累计IF>300

2024年2月&#xff0c;凌恩生物助力客户发表文章47篇&#xff08;6篇预发表&#xff09;&#xff0c;累计影响因子317.3分&#xff0c;其中包括Advanced Materials、Microbiome、Journal of Hazardous Materials、Small、Molecular Psychiatry、Science of the Total Environme…

使用 SPL 高效实现 Flink SLS Connector 下推

作者&#xff1a;潘伟龙&#xff08;豁朗&#xff09; 背景 日志服务 SLS 是云原生观测与分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务&#xff0c;基于日志服务的便捷的数据接入能力&#xff0c;可以将系统日志、业务日志等接入 …

Axure 单键快捷键 加快绘图速度 提高工作效率

画图类 R&#xff1a;绘制矩形 先点击空白页面&#xff0c;输入R即可绘制 L&#xff1a;绘制直线 先点击空白页面&#xff0c;输入L即可绘制&#xff0c;绘制的时候按住shift直线 O&#xff1a;绘制圆 先点击空白页面&#xff0c;输入O即可绘制&#xff0c;绘制的时候按…

【竞技宝】LOL:TES连下两局轻松击败OMG

【竞技宝】LOL&#xff1a;TES连下两局轻松击败OMG 北京时间2024年3月9日&#xff0c;英雄联盟LPL2024春季常规赛继续进行&#xff0c;昨日共进行三场比赛&#xff0c;第三场比赛由TES对阵OMG。本场比赛&#xff0c;TES的打野选手tian个人表现出色&#xff0c;两局比赛都多次成…

[MYSQL数据库]--表的增删查改和字段类型

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的增…