算法刷题:长度最小的子数组

news2025/3/11 8:55:25

长度最小的子数组

  • .
  • 题目链接
  • 题目详情
  • 算法原理
    • 滑动窗口
    • 定义指针
    • 进窗口
    • 判断
    • 出窗口
  • 我的答案

.

在这里插入图片描述

题目链接

长度最小的子数组

题目详情

在这里插入图片描述

算法原理

滑动窗口

这道题,我们采用滑动窗口的思想来解决,具体步骤如图所示
在这里插入图片描述

定义指针

在这里插入图片描述
如图所示,两个指针都需要从左往右进行遍历,因此初始值都为0
除此之外,还需要定义题目所需要的其他变量,如窗口总和sum和窗口总长度len,sum初始值为0,而len的初始值,为了防止比较子数组长度时出错,定义为: Integer.MAX_VALUE

进窗口

在这里插入图片描述
sum加上当前right的值,就表示进窗口

判断

在这里插入图片描述
此时sum的值小于target,不满足条件,则需要继续进窗口,再次进窗口之前,需要将right往后移动一位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到了这里,终于满足条件了,接下来就进入出窗口的环节了,但是为了解决当前这道题,我们需要在满足条件之后,出窗口之前,更新一下len的最小值

出窗口

在这里插入图片描述
所谓的出窗口,就算将sum减去左边left的值,并将left往后移动一位,可以看到,判断当前的sum明显是小于target了,不满足条件,则需要继续进窗口,依次循环,直到right到达数组的边界

我的答案

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int sum = 0,n = nums.length;
        //防止比较子数组长度时出错
        int len = Integer.MAX_VALUE;
        //定义指针
        for(int left = 0,right = 0;right<n;right++){
            //进窗口
            sum+=nums[right];
            //判断
            while(sum>=target){
                //比较长度,取最小
                len = Math.min(len,right-left+1);
                //出窗口
                sum-=nums[left++];
            }
        }
        //如果没有满足条件的子数组,需要注意返回值
        return len==Integer.MAX_VALUE?0:len;
    }
}

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

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

相关文章

AIGC实战——能量模型(Energy-Based Model)

AIGC实战——能量模型 0. 前言1. 能量模型1.1 模型原理1.2 MNIST 数据集1.3 能量函数 2. 使用 Langevin 动力学进行采样2.1 随机梯度 Langevin 动力学2.2 实现 Langevin 采样函数 3. 利用对比散度训练小结系列链接 0. 前言 能量模型 (Energy-based Model, EBM) 是一类常见的生…

食物厨艺展示404错误页面模板源码

食物厨艺展示404错误页面模板源码&#xff0c;HTMLCSSJSCSS,记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 蓝奏云&#xff1a;https://wfr.lanzout.com/i3uC71oj52ah…

初识数据库:探索数据的世界

初识数据库&#xff1a;探索数据的世界 1. 什么是数据库&#xff1f;2. 数据库的类型2.1 关系型数据库&#xff08;RDBMS&#xff09;2.2 非关系型数据库&#xff08;NoSQL&#xff09; 3. 为什么使用数据库&#xff1f;4. 如何选择合适的数据库&#xff1f;5. 结语 在信息技术…

ovs和ovn安装

ovn和ovs介绍 ovn架构图 CMS||-----------|-----------| | || OVN/CMS Plugin || | || | || OVN Northbound DB || | || | || ovn-northd || …

设置windows10资源管理器等的边框

Windows10默认状态下&#xff0c;资源管理器、浏览器等没有边框&#xff0c;在打开多个窗口等情况下&#xff0c;想要拖动或选择某个窗口时&#xff0c;不是很好定位到窗口标题栏。 通过&#xff1a;设置&#xff08;可以通过wini组合键打开设置&#xff09;---》个性化 ---》…

第十二章[模块]:12.4:标准库:datetime

一,官方文档: 1,文档地址 datetime --- 基本日期和时间类型 — Python 3.12.2 文档源代码: Lib/datetime.py datetime 模块提供了用于操作日期和时间的类。 在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。 感知型…

vue-自定义创建项目(六)

为什么要自定义创建项目&#xff1f; 因为VueCli默认创建的项目不能够满足我们的要求&#xff0c;比如默认的项目中没有帮我们集成路由&#xff0c;vuex&#xff0c;eslink等功能。 默认项目 自定义创建项目 流程&#xff1a; 创建项目命令&#xff1a;vue create custom_dem…

VNCTF 2024 Web方向 WP

Checkin 题目描述&#xff1a;Welcome to VNCTF 2024~ long time no see. 开题&#xff0c;是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述&#xff1a;源自一次现实渗透 开题 当前页面没啥好看的&#xff0c;先爆破密码登录试试。爆破无果…

项目第一次git commit后如何撤销

问题描述&#xff1a; # 1. 新建gitcode目录&#xff0c;然后在目录下 git init# 2. 用idea打开目录后&#xff0c;新建.gitignore文件后 git add .git commit -m "init project"git log# 3. 就出现如下图情况目的&#xff1a;向撤销该次代码提交 # 仅撤销 git com…

电商API接口|大数据关键技术之数据采集发展趋势

在大数据和人工智能时代&#xff0c;数据之于人工智能的重要性不言而喻。今天&#xff0c;让我们一起聊聊数据采集相关的发展趋势。 本文从电商API接口数据采集场景、数据采集系统、数据采集技术方面阐述数据采集的发展趋势。 01 数据采集场景的发展趋势 作为大数据和人工智…

Eclipse 分栏显示同一文件

Eclipse 分栏显示同一文件 1. Window -> EditorReferences 1. Window -> Editor Toggle Split Editor (Horizontal) &#xff1a;取消或设置水平分栏显示 Toggle Split Editor (Vertical) &#xff1a;取消或设置垂直分栏显示 References [1] Yongqiang Cheng, https:/…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱11(附带项目源码)

效果演示 文章目录 效果演示系列目录前言物品堆叠源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

JoySSL免费可续签通配符证书:中小企业网站安全的理想选择

在数字时代&#xff0c;网络安全已成为企业和个人用户不可忽视的重要议题。其中&#xff0c;SSL证书作为保障网站数据传输加密和身份验证的关键工具&#xff0c;对于维护网站的安全性和可信度至关重要。然而&#xff0c;对于许多中小企业来说&#xff0c;高昂的SSL证书费用常常…

网络原理(UDP与TCP篇)

网络原理 协议应用层现成的自定义协议格式运输层端口号UDP协议首部格式TCP报文段的首部格式首部格式源端口号 和 目的端口号序号确认号ack 和 ACK数据偏移&#xff08;**首部长度**&#xff09;保留窗口校验和SYNFINRSTPSHURG 和 紧急指针扩展首部填充 TCP的可靠传输TCP的超时重…

函数、极限、连续——刷题(7

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 记住和差化积、积化和差公式即可&#xff1a; 然后就可以化简&#xff1a; 3.总结&#xff1a; 记住和差化积、积化和差公式即可…

Ps:污点修复画笔工具

污点修复画笔工具 Spot Healing Brush Tool专门用于快速清除图像中的小瑕疵、污点、尘埃或其他不想要的小元素。 它通过分析被修复区域周围的内容&#xff0c;无需手动取样&#xff0c;自动选择最佳的修复区域来覆盖和融合这些不完美之处&#xff0c;从而实现无痕修复的效果。 …

7.1 Qt 中输入行与按钮

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 参考&#xff1a; 前言&#xff1a; line edit 与pushbotton的一点联动 当输入行有内容时&#xff0c;按钮才能使用&#xff0c;并能读出输入行的内容 技能&#xff1a; pushButton->setEnabled(false) 按钮不…

代码随想录 Leetcode56. 合并区间

题目&#xff1a; 代码(首刷自解 2024年2月18日&#xff09;&#xff1a; 这题与气球扎针&#xff0c;删除重复的大体逻辑相似。需要额外定义些变量来存储头尾 class Solution { private:const static bool cmp(vector<int>& a, vector<int>& b) {return …

解决:docker创建Redis容器成功,但无法启动Redis容器、也无报错提示

解决&#xff1a;docker创建Redis容器成功&#xff0c;但无法启动Redis容器、也无报错提示 一问题描述&#xff1a;1.docker若是直接简单使用run命令&#xff0c;但不挂载容器数据卷等参数&#xff0c;则可以启动Redis容器2.docker复杂使用run命令&#xff0c;使用指定redis.co…

数据库管理-第151期 Oracle Vector DB AI-03(20240218)

数据库管理151期 2024-02-18 数据库管理-第151期 Oracle Vector DB & AI-03&#xff08;20240218&#xff09;1 向量数据库应用场景2 Oracle Vector DB3 Vector数据类型4 Vector运算5 Vector DML插入向量获取向量 总结 数据库管理-第151期 Oracle Vector DB & AI-03&am…