【代码随想录 | Leetcode | 第三天】数组 | 长度最小的子数组

news2024/11/26 3:26:03

前言

欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来滑动窗口的分享

目录

  • 前言
  • 209. 长度最小的子数组
  • 总结


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

方法一:暴力,两层for循环,但是要注意一点,这里的要求是最小连续的子数组,所以第二层循环要从第一层循环的当前位置开始而且每次都要记录满足条件数组的大小,和下次的比较,取较小的

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) 
    {
        int result=INT32_MAX;   //最终结果
        int sum=0;              //和
        int subLength=0;        //连续子数组的长度
        for(int i=0;i<nums.size();i++)
        {
            sum=0;
            for(int j=i;j<nums.size();j++)
            {
                sum+=nums[j];
                if(sum>=target)
                {
                    subLength=(j-i+1);
                    result=result<subLength?result:subLength;
                    break;
                }   
            }
        }
        return result==INT32_MAX?0:result;
    }
};

在这里插入图片描述
可以看到,根本过不了,我们回头再看一下,发现暴力的时间复杂度为O(n2),而题目的要求的O(n)

方法二:滑动窗口:滑动窗口就是不断调节子数组的起始位置和终止位置,从而得出我们想要的结果
下面我们以题目中的事例一来描述一下,i代表起始位置,j代表终止位置,我们最后找到满足条件的为[4,3]
在这里插入图片描述
滑动窗口也可以理解为双指针法的一种,只不过这种解法更像是一个窗口的移动,使用滑动窗口这个方法之前首先要明确三点:

  • 窗口内的元素是什么——保持窗口内数值总和大于或等于s的长度最小的连续子数组
  • 如何移动窗口的起始位置——如果当前窗口的值大于s,则窗口向前移动(也就是窗口该缩小了)
  • 如何移动窗口的终止位置——窗口的结束位置就是for循环遍历数组的指针
    由此看出此题的关键在于如何移动窗口的起始位置——记录每一次满足条件的窗口大小,然后不断缩小比较
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums)
    {
        int result=INT32_MAX;   //最终的结果
        int sum=0;             //滑动窗口的数值的和
        int subLength=0;       //滑动窗口的长度
        int begin=0,end=0;    //滑动窗口的起始位置和终止位置
        for(;end<nums.size();end++)
        {
            sum+=nums[end];
            while(sum>=target)
            {
                subLength=end-begin+1;      //计算滑动窗口的长度
                result=result<subLength?result:subLength;
                sum-=nums[begin++];       //缩小滑动窗口,更新起始位置
            }
        }
        return result==INT32_MAX?0:result;  
    }
};

在这里插入图片描述

总结

滑动窗口是特殊的双指针算法,使用滑动窗口之前,我们先要考虑窗口内的元素要满足什么条件,起始位置和终止位置要怎么移动,再有就是需要我们构造连续的窗口

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

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

相关文章

ubantu下的前后端部署

ubantu 远程ssh连接 通过ssh远程连接服务器&#xff0c;传输文件和执行命令 首先更新软件包保证版本最新 sudo apt update安装ssh sudo apt install openssh-server安装完成后默认开启&#xff0c;也可输入命令查看ssh状态 sudo systemctl status ssh如果输入为下图&#…

warning: ignoring JAVA_HOME=D:\JDK; using bundled JDK报错解决

warning: ignoring JAVA_HOMED:\JDK; using bundled JDK报错原因是因为你JDK版本太低或者你的ElasticSearch版本太高降低版本即可、 我的是JDK1.8我下载的是elasticsearch-8.7.0改成elasticsearch-7.6.1就可以了 elasticsearch-7.6.1地址&#xff1a;弹性搜索 7.6.1 |弹性的 …

【动手学深度学习】--13.使用块的网络 VGG

文章目录 使用块的网络 VGG1.VGG块2.VGG网络3.训练模型 使用块的网络 VGG 学习视频&#xff1a;使用块的网络 VGG【动手学深度学习v2】 官方笔记&#xff1a;使用块的网络&#xff08;VGG&#xff09; 1.VGG块 经典卷积神经网络的基本组成部分是下面的这个序列&#xff1a;…

软件测试转车载测试应该怎么做?

1、你要是零基础小白&#xff0c;做车载测试零基础没有经验&#xff0c;可以找到工作吗&#xff1f;没有汽车软件测试经验零基础小白能找到汽车测试的工作吗&#xff1f;对于企业而言&#xff0c;企业比较倾向于录用&#xff0c;就能给公司带来利益的员工来了就能直接上岗&…

公开讲座笔记 | 雷达学报 雷达系统微课 - 第一讲 雷达系统 与 “1+1=2“

原笔记链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486333&idx1&sn05397073a1e645d68e2611c9f9f3aeef&chksmcf51b984f8263092dd4ac6c6fd76817ae022ec8f0cda9a915245156cb4c3eb849091da06fdd1#rd 公开讲座笔记 | 雷达学报 雷达系统…

vue3 和vue2 的插槽写法区别

目录 1. vue2 2. vue3 注意的点&#xff1a; 1. vue2 2. vue3 注意的点&#xff1a; 在data里面定的初值&#xff0c;最好不要直接赋给表格数据。如下&#xff1a; data里面 editRow初始化 给表格tableData 赋值

Spring Boot学习

Spring Boot 配置 同一目录下配置文件优先级&#xff1a;.properties > .yml > .yaml 错误&#xff1a;org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 Caused by: java.nio.charset.MalformedInputException: Inp…

将网页数据读入数据库+将数据库数据读出到网页——基于python flask实现网页与数据库的交互连接【全网最全】

本篇博客的目标是&#xff1a;在网页端输入数据&#xff0c;然后将数据存入数据库。但仅仅“存放”还不满能足需求&#xff0c;因此我们还需要能够取出数据&#xff0c;进行数据的比对分析。 我们将任务分解为4步&#xff1a;第1步用python连接到数据库&#xff0c;第2步用pyt…

ubuntu20.04部署Nessus_pro2023年6月30日版本

这里写目录标题 1. 前期准备2. nessus前期安装2.1. 下载nessus2.2. 安装nessus2.3. 运行nessus 3. 设置nessus3.1. 初始化设置3.2. 无插件3.3. 获取更新插件3.4. 设置目录权限及插件信息3.4.1. 设置plugins目录权限3.4.2. 设置plugin_feed_info.inc权限3.4.3. 查看插件信息3.4.…

如何成为网络安全大牛(黑客)?

网安专业从始至终都是需要学习的&#xff0c;大学是无法培养出合格的网安人才的。这就是为啥每年网安专业毕业生并不少&#xff0c;而真正从事网安岗位的人&#xff0c;寥寥无几的根本原因。 如果将来打算从事网安岗位&#xff0c;那么不断学习是你唯一的途径。 网络安全为什…

C语言 register关键字与“傲娇的编译器”

1.作用&#xff1a; “建议”编译器把变量放到寄存器内&#xff0c;编译器不一定听你的&#xff08;傲娇&#xff09;&#xff01;&#xff01; 2.速度&#xff1a;寄存器>高速缓存>内存&#xff0c;寄存器空间很宝贵&#xff08;非常非常少&#xff09; 3.寄存器不支持取…

JavaScript基础篇(11-20题)

此文章&#xff0c;来源于印客学院的资料【第一部分&#xff1a;基础篇(105题)】&#xff0c;也有一些从网上查找的补充。 这里只是分享&#xff0c;便于学习。 诸君可以根据自己实际情况&#xff0c;自行衡量&#xff0c;看看哪里需要加强。 概述如下&#xff1a; 模块化开…

React和Vue生命周期、渲染顺序

主要就是命名不同 目录 React 组件挂载 挂载前constructor() 挂载时render() 挂载后componentDidMount()&#xff1a;初始化节点 更新 更新时render()&#xff1a;prop/state改变 更新后componentDidUpdate() 卸载 卸载前componentWillUnmount()&#xff1a;清理 V…

利用数据与分析,推动企业数字化发展的路线图

导读 如今&#xff0c;保持数据与分析&#xff08;D&A&#xff09;战略与业务发展的统一同步&#xff0c;是助力企业机构成功和推进数字化项目的关键。敏捷的数据与分析能力对于培养感知-响应能力至关重要&#xff0c;可帮助企业机构满足全新的需求&#xff0c;进入前所未…

git页面管理用户账号和密码(新建用户和初始化密码)

本文章适用&#xff1a;没有固定的用户认证&#xff08;AD域或者LDAP等&#xff09;&#xff0c;git私有仓库单独管理用户&#xff08;新建用户和初始化密码&#xff09;。 1.创建新用户 以管理员的身份登录&#xff0c;进入git的管理模式&#xff0c;点击“New user”&…

copilot使用初体验(一)

写函数 1、写一个注释&#xff0c;按下回车&#xff0c;会自动生成函数&#xff08;函数名函数体&#xff09;&#xff0c;然后按下 tab&#xff0c;接受建议。 // 找出一个数组中houseId等于3的那项 findHouseIdIs3(arr) {return arr.find(item > item.houseId 3) },快捷…

UDP-组播,广播

转自&#xff1a;https://www.cnblogs.com/wangzhilei-src/p/15314315.html UDP是面向非连接的协议&#xff0c;它不与对方建立连接&#xff0c;而是直接把数据报发给对方。UDP无需建立类如三次握手的连接&#xff0c;使得通信效率很高。因此UDP适用于一次传输数据量很少、对可…

python 100以内的质数

可以使用for循环 # 求100以内的质数 i 2 for j in range(1, 101): #如果100以内的数字除以2的余数等于0if (j % i 0): #如果是就跳过&#xff0c;继续下一个循环continueprint(j) 要找出从1到100之间的质数&#xff0c;你可以使用嵌套循环和判断条件来实现。 print("…

硬中断、软中断详解

文章目录 什么是中断&#xff1f; 什么是计算机的中断&#xff1f; 什么叫硬中断、什么叫软中断&#xff1f; 怎么查看硬中断、软中断 查看硬中断的运行情况 cat /proc/interrupts 查看软中断的运行情况 cat /proc/softirqs 怎么排查软中断过高的问题&#xff1f; 软中断注意事…

win11 win+e 打开我的电脑

在打开的【文件资源管理器】中&#xff0c;找到【选项】菜单&#xff0c;并点击该菜单 在打开的弹框中&#xff0c;将选项卡切换到【常规】&#xff0c;将【打开文件资源管理器时打开】后的下拉框&#xff0c;选择为【此电脑】&#xff0c;然后&#xff0c;点击保存即可。到此&…