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

Sliding Window Algorithm

核心目的

滑动窗口技术的主要目的是优化算法。它能将一个通常需要用两层嵌套循环(时间复杂度为 \(O(N^2)\))才能解决的问题,转化为只需一次单循环(时间复杂度为 \(O(N)\)),从而大大提高代码的执行效率。


工作原理

这个技巧就像在数组上有一个大小可变的“窗口”。它通过维护两个指针——左指针 L 和右指针 R——来框定这个窗口的范围。

  1. 移动指针:算法通过向前移动这两个指针来“滑动”这个窗口。
    • 移动右指针 R 是为了扩大窗口,纳入新的元素。
    • 移动左指针 L 是为了缩小窗口,排除旧的元素。
  2. 更新结果:每当窗口滑动到一个新的位置,就根据窗口内的元素重新计算一次结果。

适用场景

滑动窗口并不适用于所有问题。它有一个关键的使用前提:

  • 问题通常要求你在一系列连续的子数组(即“窗口”或“区间”)中找到一个最优解(比如最大值、最小值、最短长度等)。
  • 最重要的条件是,这些子数组的范围必须具有单调性。也就是说,当区间的起始点向右移动时,其结束点也必须是向右移动(或保持不变)的。用数学语言表达就是:如果两个区间1和2,它们的起始点 \(L_1 < L_2\),那么它们的结束点必须满足 \(R_1 \le R_2\)。这个特性保证了窗口只需向前滑动,而无需回跳。

两种类型

根据窗口的大小是否变化,滑动窗口可以分为:

  • 固定大小的滑动窗口:窗口的长度始终不变。
  • 可变大小的滑动窗口:窗口的长度根据特定条件动态调整(扩大或缩小)。
http://www.gsyq.cn/news/17422.html

相关文章:

  • 国庆模拟赛总结
  • 深入解析:video-audio-extractor:视频转换为音频
  • 10.8 CSP-JS 模拟赛 T4. discover
  • 网课二
  • 学生管理系统面向对象问题分析
  • dns 委派
  • 计算机视觉的现状与未来挑战
  • #20232408 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • 详细介绍:ArcGIS Pro字段计算器与计算几何不可用,显示灰色
  • [KaibaMath]1003 关于[x+y]≥[x]+[y]的证明
  • SpringBoot进阶教程(八十七)数据压缩
  • 实用指南:Cursor 工具项目构建指南: Web Vue-Element UI 环境下的 Prompt Rules 约束(new Vue 方式)
  • VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek) - 指南
  • E. Rasta Thamaye Dilo
  • 使用 Fortran 实现英文数字验证码识别系统
  • 力扣热题100之翻转二叉树 - 详解
  • P11967 [GESP202503 八级] 割裂
  • WPS word 已有多级列表序号 - 指南
  • HTML5实现简洁的端午节节日网站源码 - 实践
  • Visio的图片,粘到word中显示不全,右边和下面显示不出来
  • 10.8动手动孬
  • [迷宫寻路 Round 3] 七连击
  • 规模化网站SSL证书终极方案
  • 详细介绍:saveOrUpdate 有个缺点,不会把值赋值为null,解决办法
  • 【OpenGL ES】光栅化插值原理和射线拾取原理
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI编程助手框架需求探索
  • 实验任务1——8
  • 实用指南:Android studio初体验
  • 给Ubuntu用户的SSH免密登入公钥文件和文件夹设置权限
  • dockercontainerd代理设置脚本