当前位置: 首页 > news >正文

滑动窗口——长度最小子数组

什么是滑动窗口 ?

滑动窗口,也称为双指针,但这个双指针是同向移动,适用于一些具有单调性的问题。也类似于暴力枚举,但并不是都要一一枚举。

滑动窗口的解题思路基本为:定义双指针,进窗口,判断,出窗口,更新结果
 

题目:

根据滑动窗口,我们来说一下思路:先定义两个指针指向头,然后left不变,每次对right及之前的数字求和然后right++(求得left和right之间的和)。我们以示例1为例:

两个指针的移动规则时,只要sum<target,我就让right++直到求和≥target。当发生此情况时,让left++然后重新计算二者之间的和(求和的方法我们可以用上一次的和-nums[left-1]。二者之间的区域我们就可以看成窗口在之间滑动,left每移动一次(符合条件的子数组),就记录一下当前的窗口长度。然后比较每一次的长度取min,直到right走到结尾。

我们发现,滑动窗口对于此题就相当于帮我们省去没必要的遍历,就以上图为例,此时sum=8,那么我就没必要枚举让right右移的所有子数组了(枚举的话虽然也一定符合target但是长度不是最短)。

int Solution(vector<int<&nums,int target)
{int n=nums.size(),sum=0,len=INT_MAX;for(int left=0,right=0;right<n;right++){sum+=nums[right];//窗口右扩while(sum>=target){len=min(len,right-left);sum-=nums[left++];//窗口左缩}}return len==INT_MAX? 0 :len; //防止整个数组都不满足的情况
}

http://www.xdnf.cn/news/319105.html

相关文章:

  • var、let、const的区别
  • 高并发内存池(一):项目简介+定长内存池的实现
  • ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
  • MySQL 8.0 OCP(1Z0-908)英文题库(1-10)
  • PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)
  • 【RabbitMQ可靠性原理】
  • 亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
  • YOLOv8的Python基础--函数篇2
  • WordPress:Locoy.php火车头采集
  • 【HTTP】《HTTP 全原理解析:从请求到响应的奇妙之旅》
  • 【MongoDB篇】MongoDB的副本集操作!
  • 数据清洗-电商双11美妆数据分析(二)
  • 5G赋能农业物联网:智能化种植的新纪元
  • JavaWeb:MySQL进阶
  • 趣味编程:梦幻万花筒
  • DBa作业
  • MCP认证全解析:从零到微软认证专家
  • (eNSP)策略路由实验配置
  • Selenium Web自动化测试学习笔记(二)--八大元素定位
  • 详细剖析传输层协议(TCP和UDP)
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK在Linux系统下设置多个USB相机(C++)
  • 3、食品包装控制系统 - /自动化与控制组件/food-packaging-control
  • 如何在Ubuntu上安装NVIDIA显卡驱动?
  • leetcode 141. Linked List Cycle
  • AtCoder Regular Contest 197 Div2 A,B题解
  • 实验六 基于Python的数字图像压缩算法
  • 全自动舆情监控系统实现方案
  • 在地震资料柯希霍夫积分法深度偏移大规模成像中,五维旅行时表高效处理策略
  • Spring MVC中Controller是如何把数据传递给View的?
  • 自由浮动时间和总浮动时间对比