news 2026/1/28 22:30:19

基础算法:滑动窗口_python版本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础算法:滑动窗口_python版本

滑动窗口算法简介

滑动窗口是一种用于处理数组或字符串子区间问题的高效算法。通过维护一个动态窗口(通常由左右指针定义),在遍历过程中调整窗口大小或位置,避免重复计算,将时间复杂度从O(n²)优化至O(n)。适用于连续子数组、子串等问题。


滑动窗口的典型应用场景

  • 寻找满足条件的最小/最大子数组长度(如和≥target的最短子数组)。
  • 统计满足特定条件的子串或子数组数量(如包含所有字符的最短覆盖子串)。
  • 处理固定长度窗口的问题(如计算大小为k的子数组平均值)。

Python实现模板

可变窗口大小(通用模板)
def sliding_window(s, target): left = 0 result = 0 # 或其他初始值(如float('inf')) current_value = 0 # 当前窗口的统计值(如和、字符频率等) for right in range(len(s)): current_value += s[right] # 更新右指针带来的影响 while 窗口满足条件(如current_value >= target): result = min(result, right - left + 1) # 更新结果(根据问题调整) current_value -= s[left] # 移除左指针的影响 left += 1 # 收缩窗口 return result
固定窗口大小(示例:大小为k的子数组平均值)
def fixed_window(nums, k): window_sum = sum(nums[:k]) result = [window_sum / k] for i in range(k, len(nums)): window_sum += nums[i] - nums[i - k] # 滑动窗口:移除左端,加入右端 result.append(window_sum / k) return result

https://www.zhihu.com/zvideo/1992086275700854850/
https://www.zhihu.com/zvideo/1992086274874578007/
https://www.zhihu.com/zvideo/1992086273930835733/
https://www.zhihu.com/zvideo/1992086272345411781/
https://www.zhihu.com/zvideo/1992086268776039137/
https://www.zhihu.com/zvideo/1992086268062999793/
https://www.zhihu.com/zvideo/1992086267031212429/
https://www.zhihu.com/zvideo/1992086266234282270/
https://www.zhihu.com/zvideo/1992086264002933279/
https://www.zhihu.com/zvideo/1992086262732051397/
https://www.zhihu.com/zvideo/1992086262019023358/
https://www.zhihu.com/zvideo/1992086260995610002/
https://www.zhihu.com/zvideo/1992086260819452112/
https://www.zhihu.com/zvideo/1992086260005757376/
https://www.zhihu.com/zvideo/1992086259796047132/
https://www.zhihu.com/zvideo/1992086258877494228/
https://www.zhihu.com/zvideo/1992086257447236496/
https://www.zhihu.com/zvideo/1992086256990057914/
https://www.zhihu.com/zvideo/1992086255610126469/
https://www.zhihu.com/zvideo/1992086254024673022/
https://www.zhihu.com/zvideo/1992086251709415629/
https://www.zhihu.com/zvideo/1992086251445170546/
https://www.zhihu.com/zvideo/1992086249360597354/
https://www.zhihu.com/zvideo/1992086249796813324/
https://www.zhihu.com/zvideo/1992086247460603291/
https://www.zhihu.com/zvideo/1992086247896786890/
https://www.zhihu.com/zvideo/1992086245468303713/
https://www.zhihu.com/zvideo/1992086244939826725/
https://www.zhihu.com/zvideo/1992086241408223124/
https://www.zhihu.com/zvideo/1992086242108658791/
https://www.zhihu.com/zvideo/1992086239504007889/
https://www.zhihu.com/zvideo/1992086238363145467/
https://www.zhihu.com/zvideo/1992086238778369509/
https://www.zhihu.com/zvideo/1992086235288717115/
https://www.zhihu.com/zvideo/1992086236370858977/
https://www.zhihu.com/zvideo/1992086235800434298/
https://www.zhihu.com/zvideo/1992086233799759300/
https://www.zhihu.com/zvideo/1992086233120265991/
https://www.zhihu.com/zvideo/1992086232621131270/
https://www.zhihu.com/zvideo/1992086231664841273/
https://www.zhihu.com/zvideo/1992086231597741830/
https://www.zhihu.com/zvideo/1992086229181818148/
https://www.zhihu.com/zvideo/1992086229106325237/
https://www.zhihu.com/zvideo/1992086227973845402/
https://www.zhihu.com/zvideo/1992086227508298907/
https://www.zhihu.com/zvideo/1992086223934742995/
https://www.zhihu.com/zvideo/1992086222378639453/
https://www.zhihu.com/zvideo/1992086222340891585/
https://www.zhihu.com/zvideo/1992086220050802315/
https://www.zhihu.com/zvideo/1992086218834461645/
https://www.zhihu.com/zvideo/1992086216741515924/
https://www.zhihu.com/zvideo/1992086214795368066/
https://www.zhihu.com/zvideo/1992086211058234131/
https://www.zhihu.com/zvideo/1992086208965264892/
https://www.zhihu.com/zvideo/1992086209279852609/
https://www.zhihu.com/zvideo/1992086209292412677/
https://www.zhihu.com/zvideo/1992086207132345927/
https://www.zhihu.com/zvideo/1992086207816033726/
https://www.zhihu.com/zvideo/1992086206742295474/
https://www.zhihu.com/zvideo/1992086206352205819/
https://www.zhihu.com/zvideo/1992086206402561315/
https://www.zhihu.com/zvideo/1992086203516884357/
https://www.zhihu.com/zvideo/1992086202308894883/
https://www.zhihu.com/zvideo/1992086201180657319/
https://www.zhihu.com/zvideo/1992086200459227255/
https://www.zhihu.com/zvideo/1992086199846846688/
https://www.zhihu.com/zvideo/1992086198773118078/
https://www.zhihu.com/zvideo/1992086198664045259/
https://www.zhihu.com/zvideo/1992086197598697102/
https://www.zhihu.com/zvideo/1992086196722110763/
https://www.zhihu.com/zvideo/1992086197166694427/


实战案例

案例1:和≥target的最短子数组(LeetCode 209)
def minSubArrayLen(target, nums): left = 0 min_len = float('inf') current_sum = 0 for right in range(len(nums)): current_sum += nums[right] while current_sum >= target: min_len = min(min_len, right - left + 1) current_sum -= nums[left] left += 1 return min_len if min_len != float('inf') else 0
案例2:无重复字符的最长子串(LeetCode 3)
def lengthOfLongestSubstring(s): left = 0 max_len = 0 char_index = {} # 记录字符最后出现的位置 for right in range(len(s)): if s[right] in char_index and char_index[s[right]] >= left: left = char_index[s[right]] + 1 # 移动左指针到重复字符的下一位 char_index[s[right]] = right max_len = max(max_len, right - left + 1) return max_len

关键注意事项

  • 窗口条件:明确收缩窗口的条件(如和超过阈值、出现重复字符)。
  • 边界处理:检查输入为空或无法满足条件的情况(如返回0或特定值)。
  • 数据结构:根据问题选择哈希表(统计频率)或变量(记录和、计数等)。

通过调整模板中的窗口条件和更新逻辑,可解决大多数滑动窗口问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/25 21:21:44

XHook:让AJAX请求拦截变得轻而易举

XHook:让AJAX请求拦截变得轻而易举 【免费下载链接】xhook Easily intercept and modify XHR request and response 项目地址: https://gitcode.com/gh_mirrors/xho/xhook 在现代Web开发中,AJAX请求处理是每个前端开发者都会遇到的场景。无论是需…

作者头像 李华
网站建设 2026/1/26 0:12:12

如何快速掌握红外小目标检测:ISNet完整指南

如何快速掌握红外小目标检测:ISNet完整指南 【免费下载链接】ISNet CVPR2022 ISNet: Shape Matters for Infrared Small Target Detection 项目地址: https://gitcode.com/gh_mirrors/is/ISNet 在计算机视觉领域,红外小目标检测是一个极具挑战性的…

作者头像 李华
网站建设 2026/1/28 4:40:04

JarkViewer图片查看器完整安装配置指南:从零开始快速上手

JarkViewer图片查看器完整安装配置指南:从零开始快速上手 【免费下载链接】jarkViewer A simple image viewer. 一款简单的看图软件。 项目地址: https://gitcode.com/gh_mirrors/ja/jarkViewer 想要一款简单实用的图片查看器吗?JarkViewer就是你…

作者头像 李华
网站建设 2026/1/25 21:48:48

DeepSeek-V2.5:AI编程效率王,多项指标大跃升

DeepSeek-V2.5:AI编程效率王,多项指标大跃升 【免费下载链接】DeepSeek-V2.5 DeepSeek-V2.5是DeepSeek-AI推出的升级版语言模型,融合了DeepSeek-V2-Chat与DeepSeek-Coder-V2-Instruct的优势,具备强大的通用编程能力。优化后更贴近…

作者头像 李华
网站建设 2026/1/26 13:47:53

Qwen3-VL-4B-FP8:解锁AI视觉推理的全新体验

Qwen3-VL-4B-FP8:解锁AI视觉推理的全新体验 【免费下载链接】Qwen3-VL-4B-Thinking-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-4B-Thinking-FP8 导语:Qwen3-VL-4B-Thinking-FP8模型凭借先进的FP8量化技术和突破性架构设…

作者头像 李华