Leetcode 209.长度最小的子数组

给定一个含有 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

思路

暴力枚举除外,想要找出连续并且相加大于target的最短的字串,至少需要两个指针进行遍历,一个在前一个在后。

第一个针对枚举次数的优化,left指针定住,right往右走,每定义sum,每次加等right,大于traget后就可以停止遍历了,因为要找最短,right再往后只会找到更长的,此时单趟遍历结束。

此时可以直接让left右移 sum-=nums[left];再次比较此时子串和是否大于target,因为有可能右移之后依然>=target,此时len还变短了,如果不符合条件再开始下一趟遍历,然后继续找符合要求的字串,找到后和原本的len进行比较,如果比原来的len小就更新比原来大就移动left然后重复上述操作。

此时可以发现,left和right和通常意义下的双指针不同,不是都向内移动,而是同向进行移动,此时,这种方法就叫做同向双指针,也叫做,滑动窗口。 就像一个随时在变的窗口一样,left是窗口左边,right是窗口右边,每次right移动可以比作进窗口,left移动可以比作出窗口。总结一下就以下三步。

代码实现复杂度O(n)

虽然套了两次循环,但时间复杂度可不是O(n^2),因为每次不管是left动还是right动,整个窗口都是在向右移动,不会再出现左移,此时最差的情况也就是right一直走走到结尾然后left一直走走到结尾。

即便如此复杂度依然为2N.

while循环

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0,right=0,len=0;int sum=0;int len1=0;while(left<(nums.size())){if(right<nums.size()) sum+=nums[right];//入窗口else{if(sum<=target) break;//如果right走到结尾此时sum依然小于target直接break,因为窗口值只会越来越小}while(sum>=target)//判断大于target{len1=right-left+1;if(len==0||len1<len)//更新结果{len=len1;}sum-=nums[left++];//出窗口}right++;}return len;}
};

for循环

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0,right=0,len=0;int sum=0;int len1=0;for(int left=0,right=0;right<nums.size();right++){sum+=nums[right];while(sum>=target){len1=right-left+1;if(len1<len||len==0){len=len1;}sum-=nums[left++];}}return len;}
};

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

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

相关文章

算法沉淀——动态规划之斐波那契数列模型(leetcode真题剖析)

算法沉淀——动态规划之斐波那契数列模型 01.第 N 个泰波那契数02.三步问题03.使用最小花费爬楼梯04.解码方法 动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种通过将原问题分解为相互重叠的子问题并仅仅解决每个子问题一次&#xff0c;将其解存…

vue3前端项目开发,具备纯天然的防止爬虫采集的特征

vue3前端项目开发,具备纯天然的防止爬虫采集的特征&#xff01;众所周知&#xff0c;网络爬虫可以在网上爬取到一些数据&#xff0c;很多公司&#xff0c;为了自己公司的数据安全&#xff0c; 尤其是web端项目&#xff0c;不希望被爬虫采集。那么&#xff0c;您可以使用vue技术…

Linux快速修改ip地址

Linux修改IP配置 一 、查找ip配置文件 ifcfg-ens33二、编辑 vi ifcfg-ens33文件三、重启网络或者重启系统 一 、查找ip配置文件 ifcfg-ens33 cd /etc/sysconfig/network-scripts/ls //查看network-scripts文件夹下面的文件二、编辑 vi ifcfg-ens33文件 vi ifcfg-ens33注意&…

阿里云国际-在阿里云服务器上快速搭建幻兽帕鲁多人服务器

幻兽帕鲁是最近流行的新型生存游戏。该游戏一夜之间变得极为流行&#xff0c;同时在线玩家数量达到了200万。然而&#xff0c;幻兽帕鲁的服务器难以应对大量玩家的压力。为解决这一问题&#xff0c;幻兽帕鲁允许玩家建立专用服务器&#xff0c;其提供以下优势&#xff1a; &am…

【mysql】1000w数据量的分页查询SQL,如何优化提升性能?

文章目录 优化场景特别注意&#xff01;&#xff01;&#xff01;有前提&#xff0c;谨慎使用 优化场景 当表数据量非常大时&#xff0c;需要进行分页查询如果慢的时候&#xff0c;可以考虑优化下。 假设一页展示10条&#xff0c;查询第10w条后面的数据时候变慢了… 优化思路&…

Sora是什么?

文章目录 前言Sora是什么&#xff1f;功能特色优点 缺点Sora模型的工作原理如何使用Sora模型Sora模型的应用场景Sora模型带来的问题虚假信息版权问题 后记 前言 Sora是美国人工智能研究公司OpenAI发布的一款令人惊叹的人工智能文生成视频大模型。近年来&#xff0c;人工智能技…

Java学习笔记------继承

继承 Java中提供了一个关键字extends&#xff0c;用这个关键字&#xff0c;我们可以让一个类和另一个类建立继承关系 如图&#xff0c;Student和Teacher类中除了study&#xff08;&#xff09;和teacher&#xff08;&#xff09;两个成员函数不同&#xff0c;其他重复了&…

会声会影2024最新官方旗舰版下载及功能讲解

会声会影支持的视频格式非常多样&#xff0c;包括但不限于&#xff1a;AVI、MPEG-1、MPEG-2、AVCHD、MPEG-4、H.264、BDMV、DV、HDV、DivX、QuickTime、RealVideo、Windows Media Format、MOD&#xff08;JVC MOD 文件格式&#xff09;、M2TS、M2T、TOD、3GPP、3GPP2 等。 这些…

【LNMP】云导航项目部署及环境搭建(复杂)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍1.1项目环境架构LNMP1.2项目代码说明 二、项目环境搭建2.1 Nginx安装2.2 php安装2.3 nginx配置和php配置2.3.1 修改nginx文件2.3.2 修改vim /etc/p…

基于PostGIS的慢查询引起的空间索引提升实践

目录 前言 一、问题定位 1、前端接口定位 2、后台应用定位 3、找到问题所在 二、空间索引优化 1、数据库查询 2、创建空间索引 3、geography索引 4、再看前端响应 总结 前言 这是一个真实的案例&#xff0c;也是一个新入门的工程师很容易忽略的点。往往在设计数据库的…

vue2+element医院安全(不良)事件报告管理系统源代码

目录 安全不良事件类型 源码技术栈 医院安全&#xff08;不良&#xff09;事件报告管理系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为主要对象&#xff0c;可以自动、及时、实际地反应医院的安全、不良、近失事件…

C++之类作用域

目录 1、全局作用域 2、类作用域 2.1、设计模式之Pimpl 2.2、单例模式的自动释放 2.2.0、检测内存泄漏的工具valgrind 2.2.1、可以使用友元形式进行设计 2.2.2、内部类加静态数据成员形式 2.2.3、atexit方式进行 2.2.4、pthread_once形式 作用域可以分为类作用域、类名…