209.长度最小的子数组(力扣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

示例 4:

输入:target = 15, nums = [5,1,3,5,10,7,4,9,2,8]
输出:2

提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

进阶:

如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

暴力

后面力扣更新了数据,暴力解法已经超时了。

class Solution {
public:// minSubArrayLen函数接收一个正整数target和一个正整数数组nums// 函数返回数组中总和至少为target的最短连续子数组的长度int minSubArrayLen(int target, vector<int>& nums) {int min = INT_MAX; // 初始化最小长度为INT_MAX,用于比较和记录最小值// 外层循环遍历数组,i指向当前考虑的子数组的起始位置for(int i = 0; i < nums.size(); i++) {long long sum = 0; // 初始化当前子数组的总和为0int length = 0; // 初始化当前子数组的长度为0// 内层循环尝试扩展子数组,j指向当前考虑的子数组的结束位置for(int j = i; j < nums.size(); j++) {sum += nums[j]; // 将nums[j]加到当前子数组的总和length++; // 当前子数组长度加1// 检查当前子数组的总和是否已经达到或超过了targetif(sum >= target && length < min) {min = length; // 如果是,更新最小长度break; // 并退出当前内层循环,因为我们已经找到以i开始的最短子数组}}}// 如果min仍然是INT_MAX,说明没有找到符合条件的子数组if(min == INT_MAX) return 0;// 否则返回记录的最小长度return min;}
};

滑动窗口

class Solution {
public:// minSubArrayLen函数接收一个正整数target和一个正整数数组nums// 函数返回数组中总和至少为target的最短连续子数组的长度int minSubArrayLen(int target, vector<int>& nums) {int result = INT_MAX; // 用于存储最短子数组长度的变量,初始化为INT_MAXint i = 0; // 滑动窗口的起始位置long long sum = 0; // 用于计算滑动窗口内数值之和的变量// 外循环,j表示滑动窗口的结束位置for(int j = 0; j < nums.size(); j++) {sum += nums[j]; // 将当前元素加到sum中// 内循环,若当前子数组和大于等于target,尝试收缩滑动窗口的起始位置while(sum >= target) {int length = j - i + 1; // 当前滑动窗口的长度result = min(result, length); // 更新找到的最短子数组长度sum -= nums[i++]; // 从sum中减去滑动窗口的起始元素,并将起始位置向右移动}}// 如果result仍然是INT_MAX,意味着没有找到符合条件的子数组,返回0if(result == INT_MAX) return 0;// 否则返回找到的最短子数组长度return result;}
};

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

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

相关文章

vue项目如何打包,java项目如何打包

目录 vue项目如何打包 java项目如何打jar包 使用Maven打包为JAR&#xff08;方式一&#xff09;视图&#xff1a; 先双击clean再双击package即可打包 使用Maven打包为JAR&#xff08;方式二&#xff09;命令&#xff1a; 1、确保你已经安装了Maven&#xff0c;并且配置了相应…

美赛提交流程与注意事项详细介绍

美赛提交流程 01 美赛选题步骤选题第一步&#xff1a;选题第二步&#xff1a;选题第三步: 02 论文提交邮箱登录提交论文发送邮箱查询进度 03 美赛提交注意事项04 题型分布/获奖技巧资料获取 内含获奖技巧、提交步骤等超多干货&#xff01; 01 美赛选题步骤 选题第一步&#xff…

kafka summary

最近整体梳理之前用到的一些东西&#xff0c;回顾Kafka的时候好多东西都忘记了&#xff0c;把一些自己记的比较模糊并且感觉有用的东西整理一遍并且记忆一遍&#xff0c;仅用于记录以备后续回顾 Kafka的哪些场景中使用了零拷贝 生产者发送消息&#xff1a;在 Kafka 生产者发送…

仅使用 Python 创建的 Web 应用程序(前端版本)第09章_购物车

在本章中,我们将实现购物车页面。 完成后的图像如下。 创建过程与之前相同,如下。 No分类内容1Model创建继承BaseDataModel的数据类Cart、CartItem2Service创建一个 CartAPIClient3Page定义PageId并创建继承自BasePage的页面类4Application将页面 ID 和页面类对添加到 Multi…

GWAS——Genome-Wide Association Study

全基因组关联研究&#xff08;Genome-Wide Association Study&#xff0c;GWAS&#xff09;是一种广泛用于寻找复杂遗传疾病关联基因的重要手段。通过大规模的群体DNA样本进行全基因组高密度遗传标记&#xff08;如SNP或CNV等&#xff09;分型&#xff0c;从而寻找与复杂疾病相…

利用python代码获取金价查询 API接口

首先&#xff0c;使用三方接口平台该API接口需要先注册后申请此API接口。申请成功后使用个人中心的API秘钥就可以进行对接开发。 API接口地址为&#xff1a; https://www.tanshuapi.com/market/detail-86 接口地址中shgold为数据源头&#xff0c;他代表的是上海黄金交易所。所…

Spring Boot 中的外部化配置

Spring Boot 中的外部化配置 一、配置文件基础1.配置文件格式&#xff08;1&#xff09;YAML 基本语法规则&#xff08;2&#xff09;YAML 支持三种数据结构 2.application 文件3.application.properties 配置文件4.application.yml 配置文件5.Environment6.组织多文件7.多环境…

什么是AI Agent

摘要 2023年11月&#xff0c;OpenAI首届开发者大会之后&#xff0c;比尔•盖茨写了一篇文章阐述了AI Agent彻底改变人机交互、颠覆软件行业&#xff0c;称之为“一个对科技行业的冲击波”、“一场自输入命令到点击图标变革之后计算机领域的最大变革”。想象一下&#xff0c;AI…

Soul CEO张璐积极履行反诈责任,倡导共建安全网络

近期,备受期待的反诈电影《鹦鹉杀》热映,深入剖析杀猪盘这一网络诈骗行为。为协助更多人增强反诈意识,备受欢迎的社交应用Soul App积极响应,在Soul CEO张璐的带领下,邀请电影中的演员和平台的反诈中心共同参与反诈宣传。此外,一旦用户在平台搜索“诈骗”、“杀猪盘”、“鹦鹉杀…

【算法题】74. 搜索二维矩阵

题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fa…

YoloV8改进策略:改进Neck|自研频域和空间注意力,超越GAM,CBAM等注意力|注意力创新改进|高效涨点|代码注释与改进|包括改进后的结构图

摘要 本文尝试改进了新的注意力,使用空间注意力和多轴频域注意力融合改进。改进后的注意力超越了GAM、BAM和CBAM等常用的注意力。 GAM # 导入PyTorch的神经网络模块 import torch.nn as nn # 导入PyTorch库 import torch # 定义一个名为GAM_Attention的类,继承自nn…

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

protobuf消息定义和使用注意事项

如果涉及到多端通讯&#xff0c;定义的protobuf消息格式可能不一样&#xff0c;会导致出现各种问题&#xff0c;比如名称或者消息的先后顺序&#xff0c;或者每个消息的id顺序不一致&#xff0c;都有可能导致解析不出来&#xff0c;我这里总结一下。 message消息名称可以不一致…

Ubuntu20.4 Mono C# gtk 编程习练笔记(四)

连续实时绘图 图看上去不是很清晰&#xff0c;KAZAM录屏AVI尺寸80MB&#xff0c; 转换成gif后10MB, 按CSDN对GIF要求&#xff0c;把它剪裁缩小压缩成了上面的GIF&#xff0c;图像质量大不如原屏AVI&#xff0c;但应该能说明原意&#xff1a;随机数据随时间绘制在 gtk 的 drawin…

Windows Server 安装 Docker

一、简介 Docker 不是一个通用容器工具&#xff0c;它依赖运行的 Linux 内核环境。Docker 实质上是在运行的 Linux 服务器上制造了一个隔离的文件环境&#xff0c;所以它执行的效率几乎等同于所部署的 Linux 主机服务器性能。因此&#xff0c;Docker 必须部署在 Linux 内核系统…

Leetcode 1268 搜索推荐系统

题目信息 LeetoCode地址: 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目理解 这道题的题意不难理解&#xff0c;在我们使用搜索引擎的每一天都会遇到&#xff0c;不需要输入完整的关键词&#xff0c;哪怕仅仅只输入一个字&#xff0c;搜索引…

前端框架 - htmx

前端框架很多&#xff0c;但是很多时候只是想要一个简单的功能&#xff0c;如点击一个按钮&#xff0c;然后发送一个请求&#xff0c;然后更新页面的某个部分&#xff0c;这个时候&#xff0c;就不需要复杂的前端框架&#xff0c;只需要一个简单的工具就可以了&#xff0c;这个…

【ArcGIS微课1000例】0095:横向图例制作案例教程

文章目录 一、加载数据二、高程分级显示三、横向图例四、注意事项一、加载数据 为了便于直观演示,本实验加载一个栅格数据(配套实验数据包中的0095.rar)并进行分级显示,效果如下: 二、高程分级显示 双击dem数据图层,打开栅格数据的【图层属性】对话框,切换到【符号系统…

最长公共子串的问题(正常方法和矩阵法,动态规划)

题目&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符…

DAY31:贪心算法入门455、53、376

理论基础 贪心算法的基本思路是通过局部最优从而达到全局最优&#xff0c;但是有时候局部最优并不一定导致全局最优&#xff0c;这样就需要动态规划的方法。但一部分题目是能通过贪心得到的。贪心的证明一般用到数学归纳法和反证法。在实际的问题中&#xff0c;没有统一的代码…