leetcode 209. 长度最小的子数组(优质解法)

news2024/12/26 0:50:49

代码:

//时间复杂度 O(N) ,空间复杂度 O(1)
class Solution {
    //采用滑动窗口的方法解决
    public int minSubArrayLen(int target, int[] nums) {
        int numsLength=nums.length;
        int minLength=Integer.MAX_VALUE;
        int left=0;
        int right=0;
        int sum=0;

        while (right<numsLength){
            sum+=nums[right];
            while (sum>=target){
                //sum 符合要求
                //以当前 left 指针指向的数的最小子数组已经找到
                minLength=Math.min(minLength,right-left+1);
                sum-=nums[left++];
            }
            //sum 不符合要求
            right++;
        }

        if(minLength==Integer.MAX_VALUE){
            minLength=0;
        }
        return minLength;
    }
}

题解:

        该题我们可以采用滑动窗口的方法来解决,对于子数组,字串的题都经常用到滑动窗口的解决方法

        我们要想获得长度最小的子数组,首先就能够想到一种暴力方法,就是去获取数组中的所有子数组,再进行遍历找到符合条件且长度最小的子数组,而滑动窗口的解决方法是基于该思想实现的,但是进行了优化

        我们以题目中的示例 1 作为例子,输⼊: target = 7, nums = [2,3,1,2,4,3]

        1.首先我们用两个指针 L 和 R 指向下标为 0 的位置,用来进行遍历(它们两个遍历的规则不同),现在 L 和 R 指针之间便是我们此时要讨论的子数组,我们定义一个 sum 变量来表示此时子数组的长度,sum+= nums[ R ] ,此时子数组的和为 2 小于 target,所以我们需要扩大子数组

2        3        1        2        4        3

L

R

        2.将 R 指针向后移一位后,子数组的总和相比于之前多了 3,sum+= nums[ R ] =5 < target,于是我们还需要将 R 指针向后移,直到子数组的总和符合条件为止

2        3        1        2        4        3

L

          R

        3.当 R 指针一直移动到如下位置时,L 指针和 R 指针之间子数组的总和为 2+3+1+2 > target,符合条件,于是取变量 minLength 和当前子数组长度的最小值进行保存,由于这是得到的第一个最小长度,所以 minLength 记录此时的长度4,这里有个细节,记录此时的长度以后我们还需要让 R 指针继续向右移动吗 ?答案是不需要,因为我们已经获得了以 L 指针指向的数据为开头且符合条件的长度最小的子数组,当我们让 R 继续向右移动,由于 nums 是一个正整数的数组,所以得到的子数组是一定符合条件的,但是长度增加了 1 ,而我们要的是最小的子数组长度,这里长度增加 1 是完全没有必要的,所以肯定不会是我们要获取的答案

2        3        1        2        4        3

L

                              R

        4.以当前 L 指针为开头的最小子数组长度我们已经获取到了,所以可以让 L 指针向右移动,讨论以下一个数据为开头的最小子数组长度,sum -= nums[ L ] = 6,这里有个细节,我们需要让 R 指针回到 L 指针所在的位置进行遍历吗?答案是不需要,因为当 R 指针指向当前位置并且加上 L 指针之前指向的数据才符合要求,所以当 L 指针移动后,R指针至少要在当前位置才可能符合要求,此时 sum = 6 < target ,于是需要 R 指针向右移动扩大子数组的总和

2        3        1        2        4        3

          L

                              R

        5.接下来就是循环的操作了,当 R 指针指向 nums.length 的位置时循环结束

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

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

相关文章

全栈冲刺 之 一天速成MySQL

一、为什么使用数据库 数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作…

vue 解决响应大数据表格渲染崩溃问题

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.场景描述 发起请求获取上万条数据&#xff0c;进行表格渲染&#xff0c;使浏览器卡顿&#xff0c;导致网页崩溃。 2.分析原因 1.大量数据加载&#xff0c;过多操作Dom&#xff0c;消耗性能。 2.表格中包含其他…

uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题

文章目录 uniapp是否可以用elementUI等前端UI库使用方法和步骤问题如何解决 uniapp是否可以用elementUI等前端UI库 在PC端开发uniapp&#xff0c;可以用elementUI&#xff0c;因为elementUI就是PC端的。 在使用uniapp&#xff0c;选择vue2.0时&#xff0c;实测可以用nodejs16的…

校园局域网规划与设计(cisco仿真模拟)

摘 要 随着网络技术的发展&#xff0c;校园网的建设已经进入到一个蓬勃发展的阶段。校园网的建成和使用&#xff0c;对于提高教学和科研的质量、改善教学和科研条件、加快学校的信息化进程&#xff0c;开展多媒体教学与研究以及使教学多出人才、科研多出成果有着十分重要而深远…

Sock0s1.1

信息收集 探测存活主机 发现存活主机为192.168.217.133 探测开放端口 nmap -sT -p- 192.168.217.133 -oA ./ports 发现两个端口开放&#xff0c;分别是22 3128&#xff0c;同时探测到了8080端口&#xff0c;但是显示是关闭的状态。 UDP端口探测 nmap -sU --top-ports 20 1…

CTF-虚拟机-QEMU-前置知识-操作流程与源码阅读

文章目录 总览内存PCI设备PCI配置空间前64个字节对应源码Memorry空间的BARIO空间的BAR MMIOPMIOIspci访问PCI设备配置空间中的Memory空间和IO空间MMIOPMIO QQM&#xff08;qemu object model&#xff09;简洁概要将 TypeInfo 注册 TypeImpl&#xff1a;ObjectClass的初始化&…

linux学习资源

linux书籍资源&#xff08;pdf版&#xff09;&#xff1a; 有需要的请在评论区留言。 《Linux Basics for Hackers》 kaiwan的三部曲&#xff1a; 《Hands-On System Programming with Linux》 《Linux Kernel Programming》 《Linux Kernel Programming Part 2》 《Ma…

电子商务网站规划

摘 要 随着我国网民数量的不断增长&#xff0c;在关于互联网政策的大力支持下&#xff0c;国内的电子商务已经发展为全民网购的热潮。什么是电子商务&#xff0c;就是在互联网中盲目投资的网名有一个稳定的有规则的平台&#xff0c;有了电子商务平台后&#xff0c;多数商家选择…

使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案

一、延长k8s证书时间 查看 apiserver 证书有效时间&#xff1a;默认是一年的有效期 [rootxuegod63 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 延长证书过期时间 1.把 update-kubeadm-cert.sh 文件上传到 xuegod63 节点 vim update-…

.net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法

文章目录 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法详细报错内容解决方案修改数据修改表修改字段 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法 详细报错内容 System.NotSupportedException…

【WPF.NET开发】WPF.NET桌面应用开发概述

本文内容 为何从 .NET Framework 升级使用 WPF 进行编程标记和代码隐藏输入和命令控件布局数据绑定图形和动画文本和版式自定义 WPF 应用 Windows Presentation Foundation (WPF) 是一个与分辨率无关的 UI 框架&#xff0c;使用基于矢量的呈现引擎&#xff0c;构建用于利用现…

【matlab程序】画海洋流场

【matlab程序】画海洋流场 clear;clc; file ( ‘0227.nc’); latncread(file,‘latitude’); lonncread(file,‘longitude’); uncread(file,‘water_u’); vncread(file,‘water_v’); [x,y]meshgrid(lon,lat); xx’; yy’; interval4; figure (1) set(gcf,‘color’,[1 1 1…

工业机器视觉megauging(向光有光)使用说明书(二,轻量级的visionpro)

测试程序暂时支持80万&#xff08;包含1024*768&#xff09;以上的gige工业相机&#xff0c;以后会支持640*480分辨率相机。 我们程序中使用注意力机制&#xff0c;其实就是感兴趣区域&#xff08;roi&#xff0c;你看过我前面博文&#xff0c;就应该明白&#xff09;精神的延…

UiPath:人工智能和重新加速增长是 2024 年的好兆头

UiPath&#xff08;NYSE&#xff1a;PATH&#xff09;重新加速增长&#xff0c;同时在销售和营销方面变得最高效&#xff0c;使其成为进入 2024 年的有吸引力的成长型股票。 UiPath 最初被归类为机器人流程自动化 (RPA) 公司&#xff0c;现在认为自己是一家人工智能驱动的自动…

PyQt基础_014_对话框类控件QFileDialog

基本操作 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class filedialogdemo(QWidget):def __init__(self, parentNone):super(filedialogdemo, self).__init__(parent)layout QVBoxLayout()self.btn QPushButton("…

探索意义的深度:自然语言处理中的语义相似性

一、说明 语义相似度&#xff0c;反应出计算机对相同内容&#xff0c;不同表达的识别能力。因而识别范围至少是个句子&#xff0c;最大范围就是文章&#xff0c;其研究方法有所区别。本文将按照目前高手的研究成绩&#xff0c;作为谈资介绍给诸位。 二、语义相似度简介 自然语言…

springboot虚拟请求——测试

springboot虚拟请求 表现层测试 web环境模拟测试 虚拟请求状态匹配——执行状态的匹配 Testvoid testStatus(Autowired MockMvc mvc) throws Exception { // //http://localhost:8080/books// 创建一个虚拟请求&#xff0c;当前访问的是booksMockHttpServletRequestBui…

Nginx反向代理详解

Nginx反向代理详解 nginx反向代理是一种常用的服务器架构设计方案&#xff0c;其原理是将客户端请求先发送到反向代理服务器&#xff0c;反向代理服务器再将请求转发到后端真实服务器处理&#xff0c;并将处理结果返回给客户端&#xff0c;从而实现负载均衡、高可用、安全和减…

SQL-分页查询offset的用法

今天在做一道关于查询一张表中第二高工资的问题时发现没有思路&#xff0c;经过一番搜索发现需要用到offset偏移量来解决这个问题。 OFFSET关键字用于指定从结果集的哪一行开始返回数据。通常&#xff0c;它与LIMIT一起使用&#xff0c;以实现分页效果。其语法如下&#xff1a…

8.ROS的TF坐标变换(二):动态坐标变换、多坐标变换代码讲解(以LIO-SAM为例)

目录 1 ROS的动态坐标变换及代码解释 1.1 什么是ROS的动态坐标变换 1.2 CMakeLists.txt、package.xml基础配置 1.3 发布方代码实现 1.4 接收方代码实现 2 ROS的多坐标变换及代码解释 2.1 什么是ROS的多坐标变换 2.2 发布方代码实现 2.3 接收方代码实现 3 L…