跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 滑动窗口算法实战:最小长度子数组

滑动窗口算法适用于正整数数组的最短子数组查找问题。通过双指针维护动态区间和,右指针扩展窗口,左指针在满足条件时收缩以优化长度。该方法避免了暴力枚举,将时间复杂度降至线性级别,是处理连续子数组问题的常用技巧。

岁月神偷发布于 2026/3/16更新于 2026/8/2043 浏览
Python 滑动窗口算法实战:最小长度子数组

能跑通滑动窗口的题目,往往有个前提:数组里的数得是正整数。这样才具备单调性——往窗口里塞个数,总和肯定涨;挪走一个,总和肯定跌。有了这个性质,双指针才能稳稳当当干活。

一、209. 长度最小的子数组

这是滑动窗口最经典的练手题。题目给了一串正整数和一个目标值 target,让你找出一段连续子数组,它们的和至少是 target,而且长度要尽可能短。找不到就返回 0。

怎么想?

别急着写代码,先理清楚窗口的变化逻辑。 想象你手里拿着两个指针,left 和 right,中间夹着一个窗口。 right 负责探路,每走一步就把新数字加进总和 s 里。 一旦 s 够大了(≥ target),说明当前窗口已经达标。这时候别停,赶紧把 left 往右挪,看看能不能在保持达标的前提下把窗口缩得更小。 每缩一次,就记一下现在的长度,跟之前的最小值比一比,取小的那个。 一直缩到 s 又不够了,再让 right 继续探路。

这里有个坑:初始化最小长度时,别设成 0 或者无穷大随便填,最好设成 n + 1。这样最后判断一下有没有被更新过,就能知道到底存不存在解。

代码落地

from typing import List

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        n = len(nums)
        ans = n + 1
        s = left = 0
        
        for right, x in enumerate(nums):
            # 扩大窗口,累加当前元素
            s += x
            
            # 当窗口和满足条件时,尝试收缩左边界
            while s >= target:
                ans = min(ans, right - left + 1)
                s -= nums[left]
                left += 1
                    
        return ans if ans != n + 1 else 0

注意看那个 while 循环。很多人会误写成 if,那样只能找到第一个满足条件的窗口,而不是最短的。只有不断收缩直到不满足条件,才能保证对于当前的 right,找到了以它结尾的最短合法子数组。

跑一遍下来,每个元素最多被 right 访问一次,被 left 访问一次,所以时间复杂度是 O(n)。空间上只用了几个变量,O(1) 搞定。

目录

  1. 一、209. 长度最小的子数组
  2. 怎么想?
  3. 代码落地
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • BFF 架构详解:为前端定制的后端服务层
  • cJSON 1.7.19 源码剖析:数据结构与解析实现
  • Net-NTLMv2 哈希捕获与破解实战
  • 上手 YOLO12 WebUI:浏览器里跑目标检测,不用装环境
  • 在 M 系列 Mac 上安装 Vivado 的实用方法
  • Spring 国际化原理与实战:MessageSource、LocaleResolver、LocaleContextHolder、MessageFormat
  • OpenClaw 橙皮书与蓝皮书实战笔记
  • GESP 2024 年 3 月 C++ 二级判断题 1-10 解析
  • Flutter 使用 groq_sdk 实现鸿蒙端 AI 推理适配指南
  • 使用 Claude Code 辅助 Verilog 编程
  • 基于强化学习的多无人机对抗决策生成与优化方法研究
  • FPGA 摄像头采集处理显示指南:OV5640 至 HDMI 实时显示
  • 国产大语言模型翻译能力评测:十款主流模型对比分析
  • 少儿学习 Python 的重要性:升学考试与职业发展分析
  • llama.cpp 实战指南:在普通 CPU 上运行大模型
  • Claude Code + GLM4.7 修复前端 Bug 失败复盘:高 Token 消耗与工程化局限
  • AI 时代下生物细胞学的最新进展
  • OpenClaw 本地 AI 智能体入门与实战指南
  • Python dotenv 库 load_dotenv() 使用指南:环境变量管理与安全实践
  • 滑动窗口算法实战:串联所有单词的子串与最小覆盖子串

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online