「Leetcode」滑动窗口—长度最小的子数组

在这里插入图片描述

💻文章目录

  • 📄题目
  • ✏️题目解析 & 思路
  • 📓总结


📄题目

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 ≤ t a r g e t ≥ 1 0 9 1 \le target \ge 10^9 1target109
  • 1 ≤ n u m s . l e n g t h ≥ 1 0 5 1 \le nums.length \ge 10^5 1nums.length105
  • 1 ≤ n u m s [ i ] ≥ 1 0 5 1 \le nums[i] \ge 10^5 1nums[i]105

✏️题目解析 & 思路

题目要求我们在数组中寻找和为target的最小子数组,我们可以先去想出暴力解法,然后再推算出滑动窗口的解法。

暴力法
我们需要找到最短的连续数组,那么最简单的方式就是用两个for循环去遍历数组累加数值,只要数值 ≥ t a r g e t \ge target target 就更新最小长度的状态。

在这里插入图片描述

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int ret = INT_MAX;for(int left = 0; left < n; ++left){int sum = 0;for(int right = left; right < n; ++right)	{sum += nums[right];						//累加数据if(sum >= target){ret = min(ret, right - left + 1);	//更新状态break;								//已经找到了最小的长度,所以退出该层循环}}}return ret == INT_MAX ? 0 : ret;}
};

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)

滑动窗口

滑动窗口的题目大抵都有一个固定的划分过程:

  1. ++right
  2. 进窗口
  3. 判断
    • 更新结果状态(根据题目不同,也可能在判断后更新状态)
    • 出窗口(++left)

我们从暴力法中不难发现,其实当我们更新最小子数组长度时, l e f t + 1 → r i g h t left+1\to right left+1right 的这段区间是重复遍历的,于是我们便可以使用滑动窗口来进行优化。当我们的 s u m ≥ t a r g e t sum \ge target sumtarget 时,同时更新 l e f t left left 的位置 与 最小子数组的长度,所谓的滑动窗口也是一种特殊的双指针类型,只不过两个指针的指向都是相同的方向。

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int sum = 0, ret = INT_MAX;for(int left = 0, right = 0; right < n; ++right){sum += nums[right];		//进窗口while(sum >= target)	//判断{ret = min(ret, right-left+1);	//更新状态sum -= nums[left++];			//出窗口}}return ret == INT_MAX ? 0 : ret;	//返回结果}
};

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

📓总结

📜博客主页:主页
📫我的专栏:C++
📱我的github:github

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

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

相关文章

低代码平台+阿里云存储:让业务开发更简单,数据存储更安全

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 随着云计算技术的不断发展&#xff0c;越来越多的企业开始将业务数据存储到云端。阿里云作为国内领先的云计算服…

低噪声 256 细分微步进电机驱动MS35776

产品简述 MS35776 是一款高精度、低噪声的两相步进电机驱动芯 片。芯片集成了快速模式与静音模式来满足高速与低速下的不 同应用。芯片内置功率 MOSFET &#xff0c;长时间工作平均电流可以达 到 1.4A &#xff0c;峰值电流 2A 。芯片集成了欠压保护、过流保护、短 地…

机器学习——自领域适应作业

任务 游戏里面的话有很多跟现实不一样的情况。 想办法让中间的特征更加的接近&#xff0c;让feat A适应feat B&#xff0c;产生相对正常的输出。 在有标签数据和没有数据的上面进行训练&#xff0c;并能预测绘画图像。 数据集 训练5000张总数&#xff0c;每类有500张测试100…

时序预测 | Python实现LSTM-Attention电力需求预测

时序预测 | Python实现LSTM-Attention电力需求预测 目录 时序预测 | Python实现LSTM-Attention电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行…

劲松中西医结合医院hpv诊疗中心回应:hpv对夫妻关系的影响

HPV&#xff0c;即人类乳头瘤病毒&#xff0c;是一种常见的性传播疾病。它的传播途径主要是通过性接触&#xff0c;因此&#xff0c;夫妻之间很可能会受到它的影响。 首先&#xff0c;HPV对夫妻关系的直接影响是它可能导致生殖器疣。这是一种常见的性病&#xff0c;主要症状是…

苹果手机中的备忘录app加密方法 这样做保护隐私

隐私&#xff0c;是我们内心世界的一部分&#xff0c;它涉及我们的个人信息、感受、想法和决定。没有隐私&#xff0c;我们就失去了这种掌控感&#xff0c;我们的生活就可能变得透明&#xff0c;好像一个没有窗帘的窗户&#xff0c;任何人都可以随时窥视。 作为一名现代人&…

智能优化算法应用:基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.…

再次申报CSC|敏感专业老师赴欧洲理工常青藤高校-德国访学

前两年O老师申报CSC&#xff0c;凭借其DIY申请的英国某高校邀请函并获批CSC。但在办理ATAS认证时&#xff0c;两次均未通过&#xff0c;不得已放弃了当年的出国指标。今年再次申报时&#xff0c;因其敏感专业背景&#xff0c;我们建议申请英美以外签证易通过国家。最终我们助其…

22款奔驰GLE450升级小柏林音响 提升音质效果

开车是一种很枯燥的事&#xff0c;特别是在拥堵路段很容易让人变得很烦躁&#xff0c;在我们平常生活中汽车陪伴我们的时间是非常久的&#xff0c;在网上经常看到很多人把车比作老婆&#xff0c;为了让自己的“老婆”内在更加美&#xff0c;很多车友对音乐尤为热衷&#xff0c;…

前端带你学后端系列 ⑥【安全框架Spring Security篇二】

前端带你学后端系列 ⑥【安全框架Spring Security篇二】 Ⅰ Spring Security实战一① Spring Security中的密码加密② Spring Security四种权限控制方式③ 关于JWT&#xff0c;以及Spring Security 结合JWT实现登陆验证① jwt 的组成② Spring Security 结合JWT登陆验证的流程①…

社交网络分析4(下):社交网络链路预测分析、LightGBM框架、LLSLP方法(LightGBM 堆叠链路预测)、堆叠泛化 、社交网络链路预测分析的挑战

社交网络分析4 写在最前面LightGBMLightGBM简介GBDT的核心概念和应用LightGBM的特点LightGBM与GBDT的比较 LightGBM的原理与技术GBDT的传统算法LightGBM的创新算法 GOSS&#xff08;Gradient-based One-Side Sampling&#xff09;算法解析概念和工作原理算法的逻辑基础GOSS算法…

app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。

上架提示 您的应用在运行时&#xff0c;未同步告知权限申请的使用目的&#xff0c;向用户索取&#xff08;相机&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。 测试步骤&#xff1a;管理-添加-点击二维码&#xff0c;申请相机权限 修改建议&#xff1a;APP在调…