【LeetCode每日一题】LeetCode 209.长度最小的子数组

LeetCode 209.长度最小的子数组

题目描述

给定一个正整数数组 nums 和一个正整数 target,找出连续子数组的最小长度,使得子数组的和大于或等于 target。如果不存在符合条件的子数组,返回 0。

Java 实现代码

public class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int left = 0, sum = 0, minLength = Integer.MAX_VALUE;for (int right = 0; right < n; right++) {sum += nums[right]; // 扩展窗口,加入当前元素// 窗口内的和大于等于 target 时,尝试缩小窗口while (sum >= target) {minLength = Math.min(minLength, right - left + 1);sum -= nums[left]; // 移动左指针,缩小窗口left++;}}return minLength == Integer.MAX_VALUE ? 0 : minLength;}
}

解题思路

  1. 滑动窗口:使用两个指针 leftright 来表示当前窗口的边界,窗口的右边界逐步扩展,直到窗口内的和大于等于 target

  2. 窗口收缩:每当当前窗口的和大于等于 target 时,尝试通过移动左指针(即收缩窗口)来找到最小的符合条件的子数组。每次更新最小长度。

  3. 返回结果:在遍历完数组后,若未找到符合条件的子数组,则返回 0;否则返回最小长度。

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。由于每个元素最多被访问两次(一次是右指针扩展,另一次是左指针收缩),因此时间复杂度是 O(n)。
  • 空间复杂度:O(1),只用了常数级别的额外空间。

举例说明执行过程

假设输入数组 nums = [2, 3, 1, 2, 4, 3]target = 7

  1. 初始化

    • left = 0, sum = 0, minLength = Integer.MAX_VALUE
  2. 遍历右指针

    • right = 0sum = 0 + nums[0] = 2sum = 2,不满足条件 sum >= 7,继续扩展。
    • right = 1sum = 2 + nums[1] = 5sum = 5,不满足条件 sum >= 7,继续扩展。
    • right = 2sum = 5 + nums[2] = 6sum = 6,不满足条件 sum >= 7,继续扩展。
    • right = 3sum = 6 + nums[3] = 8sum = 8,满足条件 sum >= 7,此时子数组为 [2, 3, 1, 2],长度为 4,更新 minLength = 4
  3. 收缩窗口

    • 由于满足 sum >= target,我们尝试通过移动 left 来缩小窗口:
    • left = 0sum = 8,缩小窗口,sum -= nums[0] = 8 - 2 = 6left = 1sum = 6,不满足 sum >= 7,继续扩展右指针。
  4. 继续遍历

    • right = 4sum = 6 + nums[4] = 10,满足 sum >= 7,此时子数组为 [3, 1, 2, 4],长度为 4,但 minLength 仍然保持 4。
  5. 收缩窗口

    • left = 1sum = 10,继续缩小窗口,sum -= nums[1] = 10 - 3 = 7,此时 sum >= target,子数组为 [1, 2, 4],长度为 3,更新 minLength = 3
  6. 继续遍历

    • right = 5sum = 7 + nums[5] = 10,满足 sum >= 7,此时子数组为 [1, 2, 4, 3],长度为 4,但 minLength 保持为 3。
  7. 收缩窗口

    • left = 2sum = 10,继续缩小窗口,sum -= nums[2] = 10 - 1 = 9,仍然满足 sum >= 7,子数组为 [2, 4, 3],长度为 3,minLength 保持为 3。
    • left = 3sum = 9,继续缩小窗口,sum -= nums[3] = 9 - 2 = 7,满足 sum >= 7,子数组为 [4, 3],长度为 2,更新 minLength = 2
  8. 结束遍历

    • 右指针已经遍历完整个数组,最终得到 minLength = 2

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

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

相关文章

【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…

从单体到微服务:如何借助 Spring Cloud 实现架构转型

一、Spring Cloud简介 Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案&#xff0c;它提供了一系列的工具和组件&#xff0c;帮助开发者快速构建分布式系统&#xff0c;尤其是微服务架构。 Spring Cloud 提供了诸如服务发现、配置管理、负载均衡、断路器、消息总线…

yarn : 无法加载文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁

关于执行安装yarn命令后执行yarn -v报错&#xff1a; 先确认执行安装yarn命令是否有误 # 安装yarn npm install yarn -g 终端输入set-ExecutionPolicy RemoteSigned 当然如果yarn -v仍然执行失败&#xff0c;考虑使用管理员方式运行IDEA&#xff0c; 注&#xff1a;如上操作…

centos 常见问题处理

免密登录配置 # 在当前机器下 执行命令 生成 私钥和公钥 ~/.ssh 目录下 ssh-keygen -t rsa # 执行如下命令 把公钥 放到 对应机器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 两台机器两两配置 centos ssh连接慢 vim /etc/ssh/sshd_config # UseD…

java全栈day12-后端Web实战(IOC+DI)

前言&#xff1a;前面的基础知识了解后进入实战篇&#xff0c;从以下四个方面进行准备 一、开发规范 1.1前后端分离开发 前言回顾 二、Restful风格 引言&#xff1a;前端与后端在进行交互的时候&#xff0c;所使用的url风格叫Restful。 2.1概述 小结 2.2环境准备 2.2.1apif…

链式设计模式——装饰模式和职责链模式

一、装饰模式 1、概述 动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活。 ConcreteComponent &#xff1a;是定义了一个具体的对象&#xff0c;可以给这个对象添加一些职责&#xff1b;Decorator &#xff1a;装饰抽象…

Cmake+基础命令

一、版本要求&#xff1a; 检查 cmake 版本号的最低要求&#xff0c;不满足条件时报错。 cmake_minimum_required(VERSION <version>)参数&#xff1a; version&#xff1a;最低要求的版本号 例子&#xff1a; # 最低要求安装3.21版本的cmake cmake_minimum_required…

Java——容器(单例集合)(上)

一 容器介绍 容器&#xff0c;是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、箱子和包等 程序中的“容器”也有类似的功能&#xff0c;用来容纳和管理数据。比如&#xff0c;如下新闻网站的新闻列表、教育网站的课程列表就是用“容器”来管理 视频…

word poi-tl 表格功能增强,实现表格功能垂直合并

目录 问题解决问题poi-tl介绍 功能实现引入依赖模版代码效果图 附加&#xff08;插件实现&#xff09;MergeColumnData 对象MergeGroupData 类ServerMergeTableData 数据信息ServerMergeTablePolicy 合并插件 问题 由于在开发功能需求中&#xff0c;word文档需要垂直合并表格&…

OpenCV相机标定与3D重建(11)机器人世界手眼标定函数calibrateRobotWorldHandEye()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算机器人世界/手眼标定&#xff1a; w T b _{}^{w}\textrm{T}_b w​Tb​ 和 c T g _{}^{c}\textrm{T}_g c​Tg​。 cv::calibrateRobotWorldHa…

GPT系列模型简要概述

GPT-1&#xff1a;&#xff08;0.117B参数量&#xff0c;0.8B words预训练数据) 动机&#xff1a; 在RNN和Transformer之间&#xff0c;选择了后者。 和《All your need is Attention》翻译模型的Encoder-Decoder架构相比&#xff0c;只保留Decoder&#xff0c;因此去掉了Cross…

汽车升级到底应不应该设置“可取消“功能

最近&#xff0c;汽车OTA&#xff08;Over-the-Air&#xff09;升级频频成为车主讨论的热点。有些车主反映&#xff0c;一些升级增加了实用功能&#xff0c;而另一些却让体验变得复杂甚至带来不便。于是&#xff0c;大家不禁发问&#xff1a;汽车升级功能究竟应不应该允许“可取…

单片机 PCB 设计要点

一、引言 单片机作为现代科技的重要组成部分&#xff0c;其 PCB 设计至关重要。本文将详细介绍单片机 PCB 设计的要点和流程&#xff0c;帮助读者更好地掌握这一关键技术。 在电子世界的浩瀚星海中&#xff0c;单片机无疑是现代科技中一颗闪烁的明珠。作为掌握嵌入式系统的基…

Django+Apscheduler 开发定时任务模块【六】

目录 回顾 前五个文章讲述了django-autojob的部分代码和执行逻辑 【DjangoApscheduler 开发定时任务模块】【一】 【DjangoApscheduler 开发定时任务模块】【二】 【DjangoApscheduler 开发定时任务模块】【三】 【DjangoApscheduler 开发定时任务模块】【四】 【DjangoApsch…

Ubuntu中配置交叉编译工具的三条命令的详细研究

关于该把下面的三条交叉编译配置语句加到哪里&#xff0c;详情见 https://blog.csdn.net/wenhao_ir/article/details/144326545 的第2点。 现在试解释下面三条交叉编译配置语句&#xff1a; export ARCHarm export CROSS_COMPILEarm-buildroot-linux-gnueabihf- export PATH$…

wlanapi.dll丢失怎么办?有没有什么靠谱的修复wlanapi.dll方法

在遇到各种系统文件错误当中&#xff0c;其中之一就是“wlanapi.dll文件丢失”的问题。这种问题通常发生在Windows操作系统上&#xff0c;特别是当系统试图执行与无线网络相关的任务时。wlanapi.dll是一个重要的系统文件&#xff0c;它负责处理Windows无线网络服务的许多功能。…

利用ipmi工具设置ip、用户等设置

#打开交互模式 ipmitool -I open shell #切换管理端口为lom1&#xff0c;即共享em1/eth0 delloem lan set shared with lom1 #设置ip、mask、gateway lan set 1 ipaddr 10.0.0.250 lan set 1 netmask 10.0.0.250 lan set 1 defgw ipaddr 10.0.0.250 #查看用户名 user list 1 …

Python之因子分析详细步骤

1.数学原理 1.1数学模型 1.2正交因子模型假设 注意&#xff1a;下面的推导都是基于这一假设。因此&#xff0c;这里的模型都是属于正交因子模型。 1.3正交因子模型的协方差结构 1.4各类方差贡献的介绍 在1.3正交因子模型的协方差结构中&#xff0c;我们介绍了“方差贡献”&…

unity3d—demo(2d人物左右移动发射子弹)

目录 人物代码示例&#xff1a; 子弹代码示例&#xff1a; 总结上面代码&#xff1a; 注意点&#xff1a; 人物代码示例&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerTiao : MonoBehaviour {public f…