JavaScript滑动窗口算法

本文详细介绍了滑动窗口算法的两种应用场景:寻找最长的无重复字符子串和寻找和大于目标值的最短子数组。通过具体的LeetCode题目解析,展示了如何运用滑动窗口思想解决实际问题。文章提供了清晰的解题思路和JavaScript实现代码,帮助读者深入理解滑动窗口算法。

JavaScript滑动窗口算法

1 思想

在力扣上刷题时经常可以看到这样的题,求XXX的子串、子数组、子序列等等,这类题一般使用滑动窗口来解决。本篇文章的思路学习了bilibili的up主红桃A士。

情况一:寻找最长的

①初始化左右指针left和right,左右指针之间的内容就是窗口,定义一个变量result记录当前的滑动窗口的结果,定义一个变量bestResult记录当前滑动窗口下的最优结果
②right要向右逐位滑动循环
③每次滑动后,记录当前滑动的结果。如果当前的结果符合条件,则更新最优的结果,然后right要继续向右滑动;如果当前的结果不符合条件,那么要让left逐步收缩
④当right到达结尾时停止滑动

初始化left,right,result,bestResult
while (右指针没有到结尾) {
   
   
    窗口扩大,加入right对应元素,更新当前result
    while (result不满足要求) {
   
   
        窗口缩小,移除left对应元素,left右移
    }
    更新最优结果bestResult
    right++;
}
返回bestResult

情况二:寻找最短的

①初始化左右指针left和right,左右指针之间的内容就是窗口,定义一个变量result记录当前的滑动窗口的结果,定义一个变量bestResult记录当前滑动窗口下的最优结果
②right要向右逐位滑动循环
③每次滑动后,记录当前滑动的结果。如果当前的结果符合条件,则更新最优的结果,然后right要继续向右滑动;如果当前的结果不符合条件,那么要让left逐步收缩
④当right到达结尾时停止滑动

初始化left,right,result,bestResult
while (右指针没有到结尾) {
   
   
    窗口扩大,加入right对应元素,更新当前result
    while (result不满足要求) {
   
   
    	更新最优结果bestResult
        窗口缩小,移除left对应元素,left右移
    }
    right++;
}
返回bestResult

2 代码

下面以力扣的两道题来说明两种情况。

1、寻找最长的

力扣3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

示例 1:
输入: s = “abcabcbb”
输出: 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值