滑动窗口算法(Sliding Window Algorithm)

滑动窗口算法(Sliding Window Algorithm)滑动窗口算法 SlidingWindo Slidingwindo Thistechniqu

滑动窗口算法(Sliding Window Algorithm)

Sliding window algorithm is used to perform required operation on specific window size of given large buffer or array.

This technique shows how a nested for loop in few problems can be converted to single for loop and hence reducing the time complexity.

该算法是通过使用特定大小的子列表,在遍历完整列表的同时进行特定的操作,以达到降低了循环的嵌套深度。

一、基本示例

如下图所示,设定滑动窗口(window)大小为3,当滑动窗口每次划过数组时,计算当前滑动窗口中元素的和,得到结果res。

滑动窗口算法基本
理解时可以将数据想象成打孔纸带,滑动窗口便是上面的处理及,每次处理局部数据,进而达到整体数据的处理效果,当然滑动窗口的尺寸可以是固定也可以是动态的,这便需要根据待解决的问题,具体分析。
在这里插入图片描述
需要注意的是,滑动窗口算法更多的是一种思想,而非某种数据结构的使用。






二、经典使用

1. 连续元素最大和

题目

给定数组,获取数组中n个连续元素,最大的和。

Input: [-3, 3, 1, -3, 2, 4, 7], n=3 Output: 13 
解法及分析

暴力解法

function maxSumSub(arr, n) { 
    const len = arr.length; if (n >= len) { 
    return arr; } let maxSum = 0; for (let i = 0; i + (n - 1) < len; i++) { 
    let tempSum = arr[i]; for (let j = 1; j < n; j++) { 
    tempSum += arr[i + j]; } maxSum = Math.max(maxSum, tempSum); } return maxSum; } 

滑动窗口算法

function maxSumSub(arr, n) { 
    const len = arr.length; let maxSum = 0; if (n >= len) { 
    return arr; } for (let i = 0; i < n; i++) { 
    maxSum += arr[i]; } let windowSum = maxSum; for (let i = n; i < len; i++) { 
    windowSum += arr[i] - arr[i - n]; maxSum = Math.max(maxSum, windowSum); } return maxSum; } 

2. 最长无重复子字符串

题目

给定字符串,计算最长子字符串的长度,该子字符串满足如下条件:

  1. 是给定字符串的子字符串
  2. 子字符串中无重复字符
Input: "abcabcbb" Output: 3 
解法及分析

详见Longest Substring Without Repeating Characters

三、参考资料

Window Sliding Technique

Sliding Window Algorithm(滑动窗口算法)分析与实践

Sliding Window Algorithm Basic Information

Longest Substring Without Repeating Characters

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202969.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:54
下一篇 2026年3月19日 下午10:54


相关推荐

  • 英语时态=时间+状态

    英语时态=时间+状态十六种时态 时态的 时 指的是动态发生的时间 态 是即动作的状态 英语的句子中都可以找到这两者 时间轴 1 任何动作都会有 3 种状态 一般状态 正在发生 已经完成 2 在某个时点上正在发生的动作是进行时 这个时点可以是过去 现在 将来某个时点 3 在某个时点上已经完成的动作是完成时 这个时点可以是过去 现在 将来某个时点 4 如果动作不是正在进行 又不是已经完成 则用一般时态那么我们如何利用这个时间轴去理解我们 16 种英语时态呢 辨别方法我的理解是这样的 首先你要确定你要表达的东西是基

    2026年3月26日
    2
  • 虚拟机如何配置yum源_rhel7配置本地yum源

    虚拟机如何配置yum源_rhel7配置本地yum源openEuler虚拟机配置yum源开始1、首先查看系统内核情况uname-a得知内核是aarch642、查看原yum源cd/etc/yum.repos.d/catopenEuler_aarch64.repo3、下面开始配置viopenEuler_aarch64.repo把下面这段复制下来添加进去[b…

    2022年8月13日
    6
  • IndexedDB详解

    IndexedDB详解IndexedDB 是一种在浏览器端存储数据的方式 既然称之为 DB 是因为它丰富了客户端的查询方式 并且因为是本地存储 可以有效的减少网络对页面数据的影响 有了 IndexedDB 浏览器可以存储更多的数据 从而丰富了浏览器端的应用类型

    2026年3月20日
    2
  • usb转485驱动

    usb转485驱动usb转485驱动是官方提供的一款USB驱动,本站收集提供高速下载,用于解决USB接口不能正常识别,无法正常使用的问题,本动适用于:WindowsXP/Windows7/Windows8/Windows1032/64位操作系统。有需要的朋友可以来本站下载安装。usb转485驱动http://www.equdong.net/qtrj/usbdrv/16155.html…

    2022年4月30日
    64
  • Android n_android 反编译

    Android n_android 反编译androidN编译,可能会遇到问题,有三点相关,jdk配置不对、jack开启/运行失败、jack_vm_args。

    2025年9月22日
    6
  • 光功率 博科交换机_博科光纤交换机zone划分命令方法「建议收藏」

    光功率 博科交换机_博科光纤交换机zone划分命令方法「建议收藏」博科光纤交换机zone划分命令方法Brocade(博科)交换机为例,记录其划分命令和划分方法:连接交换机:可通过串口或网线从IE进入,默认IP  10.77.77.77,255.255.255.0创建ZONE有两种方式:一是通过交换机port号,二是通过主机和存储的WWN号 (单个硬盘没有WWN号,存储整体才有一个)命令:查看当前zone状况:zoneshow删除zone:zonedele…

    2022年5月22日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号