8.LeetCode算法习题讲解--滑动窗口--长度最小的子数组

发布时间:2026/10/5 14:08:08

8.LeetCode算法习题讲解--滑动窗口--长度最小的子数组 一.题目习题链接209. 长度最小的子数组 - 力扣LeetCode二.题目讲解给定全正整数数组nums和正整数target找到连续子数组满足子数组和 ≥ target 要求找出满足条件的最短子数组长度不存在返回 0。⚠️关键点子数组 连续元素数组所有元素都是正数这是算法优化的核心前提三.算法原理讲解解法一暴力枚举首先我们想到的肯定是遍历所有子数组然后找到一个一个匹对找到最小的那个子数组长度。枚举所有子数组起点 i再从起点向后不断累加元素终点 j一旦区间和 ≥ target记录区间长度j-i1因为往后 j 更大长度只会更长内层循环可以直接 break。缺点时间复杂度 O(n^2)暴力会超时只能用来理解题意不能 AC。解法二利用单调性“同向双指针”来优化我们不是在讲滑动窗口怎么用双指针来解题了呢这里的双指针不是我们之前提到的双指针这里我们来分析一下1.单调性由于数组中存放的全是正整数所以每次加一个数都会变大单调递增的2.同向双指针两个指针朝同一个方向运动下面我们画图来分析定义两个指针开始时指向0然后让右指针不断向后面走将 [left , right]之间的区间看作一个窗口right向后面走的时候就相当于数据进窗口然后不断sum直到sumtarget停下来这时找到一个区间长度注意right后面的数就不用进窗口了因为进去之后的长度都要比现在的长我们找的是最小的那个区间长度这里就用到了单调性然后是让left就相当去出窗口right是重新指向left还是不动呢这里我们可以通过运动观察到如果指向图一走之后还会变到图二这种状态所以不需要让right指针回到left的位置这也是滑动窗口的由来同时这里也是前面讲的同向双指针这里注意出窗口前要更新len的长度然后让sum-left后继续判断sum和target的关系重复该操作结束条件right走向末尾四.编写代码这里需要注意几个点1.外层循环是让right一直向后面走直到走到末尾才结束内层循环是让left直到sumtarget才结束2.绿色框因为更新长度要取最小的这里如果给0就会一直是0所以给最大3.红色框是判断条件为什么是等号因为是循环是先判断再更新长度最后才会出窗口所以当sumtarget的时候还要更新长度然后后面sum会小于target但是他不会进入循环len也就不会变4.蓝色框这里是判断len长度是否变化变化了说明进入了循环说明sumtarget返回len没变化说明没有进入循环sumtarget没有满足条件的子数组然后就返回0class Solution { public: int minSubArrayLen(int target, vectorint nums) { int left 0, sum 0,len INT_MAX; for(int right 0; right nums.size();right) { sum nums[right]; // 进窗口 while(sum target) { //更新长度 len min(len,right - left 1); sum - nums[left]; left; } } return len INT_MAX ? 0 : len; } };
延伸阅读

更多相关文章

2026/9/25 14:49:35

python列表学习笔记

目录简述添加元素删除元素排序反转列表推导式遍历简述 是一个容器 是一个可变的集合,是一个元素有序、可重复的序列 添加元素 append在末尾添加新元素 lst [1,2,3] lst.append(4)insert 在指定索引处添加数据 lst [1,2,3] lst.insert(0,0)删除元素…

2026/10/3 13:26:38

Python面向对象编程:从封装、继承到多态的实战进阶指南

1. 项目概述:为什么面向对象是Python进阶的必经之路如果你已经能熟练地用Python写一些脚本,处理数据,或者用几个循环和判断语句完成一些小任务,那么恭喜你,你已经迈出了第一步。但很快你会发现,当项目稍微复…

2026/10/5 14:07:51

MATLAB求解一维对流扩散方程:格式选择、稳定性分析与工程实现

我们做工程的人都明白,很多实际问题最终都会归结到那么一两个偏微分方程上。河流里污染物随水流往下游走、土壤中热量向深处传递、反应器里浓度在空间上重新分布,这些现象的背后都能看到同一种数学结构:对流扩散方程。它的特点是既有“跟着流…

2026/10/5 14:07:51

C#集合:Dictionary与Hashtable的区别及底层原理深度解析

我最早被这道"C#每日面试题-Dictionary和Hashtable的区别"问住,是在一次电话面试里。当时我按教科书背了七八条差异,面试官听完只问了一句:"Hashtable你上一个项目里真用过吗?如果不用,它为什么还没被删…

2026/10/5 14:07:51

plugins 插件机制全解析:从 plugin.json 到 TypeScript SDK 与 CLI 实战

1. 从“plugins”这个词说起:它到底在解决什么问题但凡折腾过现代开发工具的人,对plugins这个词都不会陌生。它字面意思就是“插件”,但真正理解它的人知道,这背后其实是一整套可扩展架构的设计哲学。我最早接触插件体系是在编辑器…

2026/10/5 14:07:51

Go开源后台管理系统推荐:5个官方仓库怎么按项目形态核验

Go开源后台管理系统推荐:5个官方仓库怎么按项目形态核验 Go开源后台管理系统推荐:5个官方仓库怎么按项目形态核验 Go开源后台管理系统推荐不能只看 Stars、搜索位置或首页截图,应该核验官方仓库。2026-10-04 通过 GitHub REST API 重新核对…

2026/10/5 14:02:51

从提示符到历史管理:打造一套可复用的Shell终端增强环境

1. 从一个小需求到一套完整的终端工作区先说说我为什么开始折腾这套东西。你如果整天跟命令行打交道,大概率也会被这几个问题烦到:提示符光秃秃的,连自己现在在哪个分支、哪个目录都看不出来;敲过的历史命令翻起来全靠运气&#x…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑