首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法滑动窗口

在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。这样的操作在面对极大的数据量是,效率极低。...而滑动窗口法是维护两个指针来进行操作,通常情况下时间复杂度为O(N)。...那么我们可以试着用滑动窗口的方法来看看。 滑动窗口的方法通过一个for循环来达到目的,那问题又来了,for循环表示的是窗口的起始位置,还是终止位置?...所以,for循环表示的是滑动窗口的终止位置,我们也可以通过这个题目来验证一下。...以题目中的数组nums=[2,3,1,2,4,3],目标和target=7为例,来模拟一下滑动窗口的运行过程: 根据子序列和的大小不断调整滑动窗口的大小,当和小于target时,end++;当和大于等于

18510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    滑动窗口”算法实例

    对于该现象,即可使用“滑动窗口”算法滑动窗口算法也是一种思想,是双指针的拓展和延伸。滑动:指这个窗口是移动的,也就是移动是按照一定方向来的。...面对前面所提出的问题,使用“滑动窗口”算法,大致思路为: 设置两个指针和一个空列表 固定左指针,不断右移右指针,同时更新最长不重复字符串长度 如果出现重复字符,再右移左指针,如此重复,直到遍历完字符串的所有字符...') else: print(max_length) # 打印最大不重复字符串长度 ''' 测试结果: abcabcbb 输出:3 aaaaaaaa 输出:1 ''' 3 结语 通过测试,发现“滑动窗口...”算法可以很好的解决该问题,与此同时,相对于暴力求解,其时间复杂度和空间复杂度也得到了优化。...都可以使用“滑动窗口”算法

    14610

    基础算法---滑动窗口

    什么是滑动窗口 滑动窗口(Sliding Window)是一种在计算机科学中用于解决各种子数组或子字符串问题的技术。...滑动窗口的几个基本步骤: 1.进窗口 2.判断是否出窗口 3.更新结果 接下来我们用几道题来演示滑动窗口这个算法。...解法二:滑动窗口 暴力枚举的优化算法 我们看1,当我们遍历到1的情况的时候,按照暴力解法,先left指针后移,然后将right指针移到left指针重新遍历一遍即可,但是我们想一想有没有必要将right...right++; } if (begin == -1)return ""; else return s.substr(begin, minlen); } }; 总结 滑动窗口算法是一种高效且灵活的技术...通过这些示例,我们可以看到滑动窗口的强大之处,以及在实际编程中如何灵活应用这项技术。 希望这篇文章能帮助你更好地理解滑动窗口算法,并在以后的算法学习和实践中熟练应用这项技术。

    21110

    精读《算法 - 滑动窗口》

    滑动窗口算法是较为入门题目的算法,一般是一些有规律数组问题的最优解,也就是说,如果一个数组问题可以用动态规划解,但又可以使用滑动窗口解决,那么往往滑动窗口的效率更高。...因此掌握滑动窗口非常基础且重要,接下来按照我的经验给大家介绍这个算法。 精读 滑动窗口使用双指针解决问题,所以一般也叫双指针算法,因为两个指针间形成一个窗口。 什么情况适合用双指针呢?...我想可能因为: 无论几数之和,快排一次时间复杂度都是固定的,所以沿用三数之和的方案其实占了排序算法便宜。 滑动窗口只能用两个指针进行移动,而没有三指针但又保持时间复杂度不变的窗口滑动算法存在。...当然,算法如果按照固定套路就能推导出来,也就没有难度了,所以要接受这种思维跳跃。 接下来我们看一道更特殊的滑动窗口问题,接雨水,它甚至分为多段滑动窗口。...对于无固定套路的滑动窗口,就要根据题目仔细品味啦,如果所有套路都能总结出来,算法也少了乐趣。

    61420

    初识算法 · 滑动窗口(1)

    前言: 本文开始,介绍的是滑动窗口算法类型的题目,滑动窗口本质上其实也是双指针,但是呢,前文介绍的双指针是二者相向移动的: 滑动窗口就是同向移动的: 本文通过2个题目,介绍滑动窗口的基本使用,介绍的题目分别是...无重复字符的最长子串 - 力扣(LeetCode) 通过三个步骤介绍,第一步是题目解析,第二步是算法原理,第三步是算法编写,同样的,会在题目解析部分看是否存在暴力解法,那么话不多说,进入第一道题目。...那么为什么该题目一看就可以使用滑动窗口呢? 因为要求的是一段连续的空间,作为经验,碰到要求是连续空间的题目,我们不妨往滑动窗口上靠一下。 现在就进入算法原理部分。...算法原理 滑动窗口的本质是,两个指针同向移动,我们通过这两个指针的移动,判断区间之和是否满足,如果满足就进行比较长度大小。 那么如果使用滑动窗口呢?...算法原理 上一道题目的滑动窗口是长度最小的子数组,判断条件是大于等于>=target,这道题的判断条件是hash映射是否大于1,所以,得出一个结论是:使用滑动窗口的题目,有三部曲,第一是进窗口,第二是判断

    6310

    初识算法 · 滑动窗口(3)

    前言: ​本文的主题是滑动窗口,通过两道题目讲解,一道是水果成篮,一道是找到字符串中的所有字母异位词。 链接分别为: 904. 水果成篮 - 力扣(LeetCode) 438....找到字符串中所有字母异位词 - 力扣(LeetCode) 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。...题目要求也是没有要特别注意的,现在就进入算法原理部分。...算法原理 算法一眼判定为滑动窗口,因为我们是用一个连续的区间,来和另一个连续的区间进行比较,那么正常的就是进窗口,出窗口,进行判断,进窗口自然是使用right指针,进窗口之后。 什么时候出窗口呢?...那么优化我们放在算法编写里面。

    9810

    初识算法 · 滑动窗口(2)

    最大连续1的个数 III - 力扣(LeetCode) 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。...基本题目我们已经清楚了,现在我们就进行算法原理部分。 算法原理 我们这道题目使用的是滑动窗口,那么为什么使用滑动窗口呢?或者说为什么我们根据题目解析一看就知道要使用滑动窗口呢?...因为该题目的基本要求是一个连续的数组,也就是需要一段连续的空间,所以我们基本上可以断定为使用滑动窗口。 好了,既然需要使用滑动窗口,我们的三部曲,进窗口,出窗口,更新结果。...时间复杂度也是标准的O(N^2),优化就和之前一摸一样了,优化之后就是滑动窗口了。...算法原理 其实本题的算法原理在题目解析部分就已经介绍的七七八八了,无非就是一段区间,进窗口,变量++,判断变量是否大于target,大于就--,最后判断变量是否==0,如果等于0,更新结果就可以了,其实这道题还没有第一题难

    8710

    算法专题二: 滑动窗口

    滑动窗口解法, 定义两个下标, left先从第一个元素位置开始, right找右端点, 如果找到了此时right也不需再回到第二个元素开始, 和left一起向后走, 因为我们已经计算出right- left...这段区间的和了, 只需要减去第一个元素即可枚举下一个数组, 并且right前一个元素与前面元素之和我们已经知道一定是小于target的, 所以直接left++即可, 这种场景就像在维持一个滑动窗口一样,...无重复字符的最长子串 题目思路: 首先看到求子串子数组, 我们首先可以想到滑动窗口, 但是怎么判断不重复呢, 我们可以利用哈希, 但是没必要使用容器, 因为字符范围我们已经知道了, 所以自己创建一个,...将x减到0的最小操作数 题目思路: 采用正难则反的思想, 转化为找出最长子数组的长度, 所有元素之和正好等于sum- x即可, 然后进行滑动窗口求解, 最后更新结果时需要判断....串联所有单词的子串 题目思路: 这道题与上一道题的解法非常的类似, 只不过这里判断是字符串, 这里我们采用容器哈希表来求解, 移动的步长是单词的长度, 滑动窗口执行的次数为len.

    9010

    原生JS实现移动端滑动反弹

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: ? 1. 准备工作 什么是移动端的 Touch事件?...brown">列表十       css部分 在列表的父盒子上设定一个 overflow:hidden属性,使超出盒子部分的列表暂时隐藏掉,后面会通过 js...先来张示意图,怎么通过 js 让列表滑动起来 ?...解决方法: 每一次滑动结束之后,都应该记录下此次滑动的距离,与之前的进行累加,待下一次滑动的时候, ul在 Y轴的偏移值应该是之前的距离加上本次滑动的距离。...,我们参考下图,当列表向上滑动滑动到列表底部的时候,只要此时再向上滑动,就让它向下反弹。

    10.4K20

    滑动窗口算法通用思想

    文章目录 一、最小覆盖子串 二、找到字符串中所有字母异位词 三、无重复字符的最长子串 最后总结 本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道难度较大的子字符串匹配问题:...最小覆盖子串 找到字符串中所有字母异位词 无重复字符的最长子串 最后抽象出一个简单的滑动窗口算法框架。...滑动窗口算法的思路是这样: 我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。...之后重复上述过程,先移动 right,再移动 left…… 直到 right 指针到达字符串 S 的末端,算法结束。 如果你能够理解上述过程,恭喜,你已经完全掌握了滑动窗口算法思想。...如果本文对你有帮助,关注我的众公号 labuladong 看更多精彩算法文章~ 三、无重复字符的最长子串 题目链接 遇到子串问题,首先想到的就是滑动窗口技巧。

    43130

    Nagle 算法滑动窗口协议

    除此之外,TCP 还有很多其他算法和策略用来优化网络的使用。 2. Nagle 算法 2.1. 概述 Nagle 算法是一种减少 TCP/IP 网络拥塞控制的算法,主要用来解决小包问题。...Nagle 算法保证一个 TCP 连接上最多只有一个未被确认的未完成小分组,在该分组被确认前不能发送其他小分组。 2.2. 算法规则 1. 如果包长度达到 MSS(最长报文大小),则允许发送; 2....滑动窗口协议 3.1. 基本介绍 滑动窗口协议是一种常用的 TCP 流量控制方法,他允许发送方在停止并等待确认前可以连续发送多个分组。...在滑动窗口协议中,一个 ACK 可以确认若干个分组,ACK 包的确认分组号参数表示到该分组号-1 为止的所有分组都确认收到。 3.2....下图展示了 TCP 滑动窗口协议: 每当报文被确认,窗口都会向右移动,因此而被形象的称为“滑动窗口”。

    1.1K10

    Js排序算法_js 排序算法

    一、概念 快速排序算法由 C. A. R. Hoare 在 1960 年提出。...它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。...数组的分解步骤如下图所示: 三、动图演示 四、算法分析 a. 复杂度: 快速排序的方法复杂度有时间复杂度和空间复杂度。...时间复杂度往往是决定一个算法优劣的最重要出发点,空间复杂度在当今的计算机上已经没有那么大的影响力了。...快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间 复杂度是O(n) ; 而整个快速排序算法的时间复杂度与划分的趟数有关。

    25.2K20

    【c++算法篇】滑动窗口

    无重复字符的最长子串` `3.最大连续1的个数 III` `4.将 x 减到 0 的最小操作数` `5.水果成篮` `6.找到字符串中所有字母异位词` `7.串联所有单词的子串` `8.最小覆盖子串` 滑动窗口是一种常用的算法技术...一个常见的滑动窗口问题示例是找出一个数组中和至少为 target 的最短连续子数组,在这样的问题中,滑动窗口技术能够有效地找到解决方法,同时保证时间复杂度最少。...这扩大了当前的滑动窗口,包括了 right 指向的新元素 出现滑动窗口中的和大于等于 target 时,进入内层 while 循环。在内层循环中: a....使用滑动窗口,并在窗口内部跟踪了字符的出现情况。具体思路: hash 数组用来维护每个 ASCII 字符在当前考虑的子串(滑动窗口)中的出现次数。它被初始化为0。...这个问题可以用滑动窗口算法解决: hash 数组用来计数每种水果当前在窗口中的数量。 两个变量 left 和 right 表示当前窗口(子数组)的两端位置。

    15100

    leetcode必备算法:聊聊滑动窗口

    今天跟大家一起来学习滑动窗口的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~ 什么是滑动窗口? 一道算法题走进滑动窗口 滑动窗口可以用来解决哪些问题?...TCP的滑动窗口在某一个时刻就是固定窗口大小的滑动窗口,随着网络流量等因素改变窗口大小也会随着改变。算法中的滑动窗口有点类似,就是维护一个窗口(队列/数组),不断滑动,然后更新答案。...滑动窗口,指的是这样一类问题的求解方法,在数组上通过双指针同向移动而解决的一类问题。 一个例子走进滑动窗口算法 我们来看一道算法题吧:给定一个整数数组,计算长度为k的连续子数组的最大总和。...我们用滑动窗口算法来走一波: 当k=2时, 我们可以维护一个长度为2的窗口,初始化第一个窗口值的总和,并保存起来 然后窗口不断向右滑动滑动过程中,与保存的最大值比较,并更新答案。...滑动窗口可以解决哪些问题 哪些leetcode的题目,我们可以用滑动窗口去解决呢? 一般情况,子串问题,如什么最小覆盖子串、长度最小的子数组等等,都可以考虑使用滑动窗口算法

    1.5K40
    领券