news 2026/4/18 16:12:43

基础算法:滑动窗口_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/4/17 21:16:15

SweetAlert for Bootstrap 终极使用指南:打造美观弹框体验

SweetAlert for Bootstrap 终极使用指南:打造美观弹框体验 【免费下载链接】bootstrap-sweetalert 项目地址: https://gitcode.com/gh_mirrors/bo/bootstrap-sweetalert 在现代Web开发中,优雅的弹框组件能够显著提升用户体验。SweetAlert for Bo…

作者头像 李华
网站建设 2026/4/18 4:01:04

AgenticSeek终极指南:打造完全离线的智能工作伙伴

AgenticSeek终极指南:打造完全离线的智能工作伙伴 【免费下载链接】agenticSeek A open, local Manus AI alternative. Powered with Deepseek R1. No APIs, no $456 monthly bills. Enjoy an AI agent that reason, code, and browse with no worries. 项目地址:…

作者头像 李华
网站建设 2026/4/18 4:00:03

Pyxelate像素艺术转换:三步打造复古8-bit风格图片

Pyxelate像素艺术转换:三步打造复古8-bit风格图片 【免费下载链接】pyxelate Python class that generates pixel art from images 项目地址: https://gitcode.com/gh_mirrors/py/pyxelate 想要将普通照片瞬间变成充满怀旧魅力的像素艺术作品吗?P…

作者头像 李华
网站建设 2026/4/17 20:06:39

kohya-ss/sd-scripts图像生成工具从入门到精通

kohya-ss/sd-scripts图像生成工具从入门到精通 【免费下载链接】sd-scripts 项目地址: https://gitcode.com/gh_mirrors/sd/sd-scripts kohya-ss/sd-scripts是一个功能强大的Stable Diffusion图像生成工具集,基于Diffusers库开发,为用户提供了丰…

作者头像 李华
网站建设 2026/4/18 12:33:01

终极解决方案:worker-timers如何突破浏览器定时器限制

终极解决方案:worker-timers如何突破浏览器定时器限制 【免费下载链接】worker-timers A replacement for setInterval() and setTimeout() which works in unfocused windows. 项目地址: https://gitcode.com/gh_mirrors/wo/worker-timers 在前端开发中&…

作者头像 李华
网站建设 2026/4/18 8:05:36

腾讯HunyuanVideo-I2V开源:AI静态图转720P视频教程

腾讯HunyuanVideo-I2V开源:AI静态图转720P视频教程 【免费下载链接】HunyuanVideo-I2V 腾讯推出的HunyuanVideo-I2V是一款开源的图像转视频生成框架,基于强大的HunyuanVideo技术,能够将静态图像转化为高质量动态视频。该框架采用先进的MLLM多…

作者头像 李华