滑动窗口
文章平均质量分 95
滑动窗口的概念以及LeetCode的相关题目。
伟大的车尔尼
走自己的路,让别人去说吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
滑动窗口题目:滑动窗口中位数
这道题是「数据流的中位数」的进阶。在考虑这道题的解法之前,首先回顾「数据流的中位数」的解法。创建两个优先队列分别存储较小的一半元素和较大的一半元素。存储较小的一半元素的优先队列是lowerlower,基于大顶堆实现,队首元素是优先队列中的最大元素;存储较大的一半元素的优先队列是higherhigher,基于小顶堆实现,队首元素是优先队列中的最小元素。两个优先队列满足以下要求:优先队列lowerlower的队首元素小于等于优先队列higherhigher的队首元素;优先队列lower。原创 2025-10-20 18:00:00 · 1360 阅读 · 0 评论 -
滑动窗口题目:K 连续位的最小翻转次数
次,且所有的翻转操作都是必要的,即对于一个需要翻转的子数组,如果不翻转,则该子数组的最左边的元素是。,则翻转当前下标范围的子数组,否则不翻转当前下标范围的子数组。中的下标作为开始下标的子数组的翻转的影响,因此需要确保队列中的下标都不小于。此时队列中的下标都是经过翻转的子数组的开始下标,且这些子数组的翻转都会使元素。是每次翻转的子数组的长度。为了计算一个元素的翻转次数,需要使用队列存储翻转的子数组的开始下标。翻转一个下标范围的子数组,等价于该下标范围中的每个元素的翻转次数加。的翻转次数是队列中的下标个数。原创 2025-10-16 18:00:00 · 579 阅读 · 0 评论 -
滑动窗口题目:替换子串得到平衡字符串
如果哈希表中的所有字符的偏移量都非正,执行如下操作,直到哈希表中存在偏移量为正的字符。使用哈希表记录滑动窗口中的每个字符的偏移量。变成平衡的最短子串,将这两个最短子串的开始下标分别记为。统计每种字符的出现次数。实现方面,由于字符串只有四种字符,因此可以创建长度为。称为每个字符的偏移量,偏移量为正表示出现次数大于。不平衡时,一定有至少一种字符的出现次数大于。向右移动,移动过程中维护滑动窗口的左端点。对于一个子串,可以使用与该子串长度相同的。,使用当前子串的长度更新最短子串的长度。的字符串中,每个字符都出现。原创 2025-10-13 18:00:00 · 1715 阅读 · 0 评论 -
滑动窗口题目:替换后的最长重复字符
如果滑动窗口的大小不变,则滑动窗口中的子字符串的长度不可能超过已经遍历过的替换后的最长子字符串的长度。向右移动,移动过程中判断滑动窗口中的子字符串是否可以替换成由相同字符组成的子字符串,计算替换后的最长子字符串的长度。的值等于当前子字符串中的最高频率字符的出现次数,因此上述解法可以得到正确的结果。,判断当前滑动窗口中的子字符串是否可以替换成由相同字符组成的子字符串。表示子字符串中的最高频率字符的出现次数,如果子字符串的长度不超过。中的子字符串可以替换成由相同字符组成的子字符串,则左端点。原创 2025-10-06 08:00:00 · 953 阅读 · 0 评论 -
滑动窗口题目:最小覆盖子串
中的每个字符,则将子串的左端点向左移动或将子串的右端点向右移动之后,得到更长的子串,同样覆盖字符串。中的不同字符个数时,当前子串为覆盖子串,否则当前子串不为覆盖子串。中出现的字符,如果每个字符的出现次数之差都非负则子串是覆盖子串,否则子串不是覆盖子串。中出现的字符,每次更新字符在哈希表中的次数之后,需要更新计数器的值,更新方法如下。判断一个子串是否为覆盖子串的方法是,使用哈希表记录每个字符在子串中的出现次数与在。如果当前子串的长度小于最小覆盖子串的长度,则将最小覆盖子串的开始下标更新为。原创 2025-10-02 08:00:00 · 946 阅读 · 0 评论 -
滑动窗口题目:串联所有单词的子串
位,使用移出滑动窗口的单词和移入滑动窗口的单词更新哈希表。位,则有一个单词移出滑动窗口,有一个单词移入滑动窗口,滑动窗口中的其余单词的出现次数都不变。一个滑动窗口中的子串是串联所有单词的子串,等价于每个单词在滑动窗口中的出现次数和在数组。中的出现次数相等,因此需要使用哈希表记录每个单词在滑动窗口中的出现次数和在数组。,因此可以使用定长滑动窗口寻找串联所有单词的子串,滑动窗口的大小为。中的每个下标都可能作为首个滑动窗口的开始下标,因此需要分别考虑。的滑动窗口,将其中的每个单词在哈希表中的出现次数加。原创 2025-09-29 18:00:00 · 1711 阅读 · 0 评论 -
滑动窗口题目:统计「优美子数组」
都是奇数,则在不引入新的奇数的情况下,将子数组的开始下标向左移动和将子数组的结束下标向右移动之后,子数组中仍有。解法一创建新数组记录所有奇数所在下标,然后在新数组上使用定长滑动窗口统计「优美子数组」的数目。向右移动时都是从一个奇数移动到下一个奇数(这里将超出数组下标范围的元素也看成奇数)。向右移动时都经过一个奇数,然后停留在该奇数右边的相邻元素,每一轮。超出数组下标范围时,遍历结束,此时即可得到「优美子数组」的数目。中的两个相邻奇数之间的距离,且确保子数组中包含。个奇数,则该子数组是「优美子数组」。原创 2025-09-25 18:00:00 · 1784 阅读 · 0 评论 -
滑动窗口题目:包含所有三种字符的子字符串数目
的子字符串一定包含所有三种字符。因此,需要对每个下标寻找以该下标作为结束下标的包含所有三种字符的最短子字符串。,分别以这两个下标作为结束下标,寻找包含所有三种字符的最短子字符串,将这两个最短子字符串的开始下标分别记为。中的以每个下标作为结束下标的包含所有三种字符的最短子字符串。作为结束下标且包含所有三种字符的子字符串数目,因此以。的子字符串包含所有三种字符,且长度小于下标范围。作为结束下标且包含所有三种字符的子字符串数目是。作为结束下标且包含所有三种字符的子字符串数目是。的包含所有三种字符的子字符串数目。原创 2025-09-22 18:00:00 · 1637 阅读 · 0 评论 -
滑动窗口题目:乘积小于 K 的子数组
中的元素都是正整数,因此对于任意子数组,在子数组的任意一端添加元素(即增加子数组的长度)后子数组中的元素乘积一定增加,在子数组的任意一端删除元素(即减少子数组的长度)后子数组中的元素乘积一定减少,且任意子数组的元素乘积一定是正整数。的子数组的数目,需要对每个下标计算以该下标作为结束下标的乘积小于。的最长子数组,将这两个最长子数组的开始下标分别记为。,分别以这两个下标作为结束下标,寻找乘积小于。中的以每个下标作为结束下标的元素乘积小于。作为结束下标的子数组的元素乘积一定小于。,确保滑动窗口中的元素乘积小于。原创 2025-09-18 18:00:00 · 1771 阅读 · 0 评论 -
滑动窗口题目:删除子数组的最大得分
中的元素都是正整数,因此对于任意子数组,在子数组的任意一端添加元素(即增加子数组的长度)后子数组中的元素和一定增加,在子数组的任意一端删除元素(即减少子数组的长度)后子数组中的元素和一定减少。,分别以这两个下标作为结束下标,寻找元素各不相同的最长子数组,将这两个最长子数组的开始下标分别记为。为了判断滑动窗口中是否有重复元素,需要使用哈希集合存储滑动窗口中出现的元素。中的以每个下标作为结束下标的元素各不相同的最长子数组。的子数组的元素各不相同,且长度大于下标范围。向右移动,移动过程中维护滑动窗口的左端点。原创 2025-09-15 18:00:00 · 961 阅读 · 0 评论 -
滑动窗口题目:将 x 减到 0 的最小操作数
中的所有元素都是正整数,因此前缀和一定是递增的,相同的前缀和不可能出现两次。两次,分别计算元素和与前缀和,对于每个元素更新前缀和、计算答案与操作哈希表的时间都是。的子数组的最大长度,计算数组长度与子数组的最大长度之差,即为最小操作数。最左边或最右边的元素,因此剩余的元素一定是连续的。的子数组的最大长度,计算最小操作数的方法如下。的子数组的最大长度,计算最小操作数的方法如下。的子数组,将这两个子数组的开始下标分别记为。,使用当前子数组的长度更新子数组的最大长度。,使用当前子数组的长度更新子数组的最大长度。原创 2025-09-11 18:00:00 · 1873 阅读 · 0 评论 -
滑动窗口题目:长度最小的子数组
中的元素都是正整数,因此对于任意子数组,在子数组的任意一端添加元素(即增加子数组的长度)后子数组中的元素和一定增加,在子数组的任意一端删除元素(即减少子数组的长度)后子数组中的元素和一定减少。中的元素都是正整数,因此子数组元素和的最大值为整个数组的元素和。,使用当前子数组的长度更新子数组的最小长度,然后将。的子数组,因此只要找到一个子数组的元素和大于等于。由于子数组的最大长度为整个数组的长度,因此。表示滑动窗口中的元素和。的子数组的元素和,并判断是否存在长度为。的子数组的元素和,并判断是否存在长度为。原创 2025-09-08 18:00:00 · 1561 阅读 · 0 评论 -
滑动窗口题目:水果成篮
由于每棵树必须摘一个水果,因此收集的水果数目等于子数组的长度。为了得到收集的水果的最大数目,应得到符合要求的最长子数组。中的所有元素都是小于数组长度的非负整数,因此可以创建一个与数组。个不同元素的最长子数组,将这两个最长子数组的开始下标分别记为。使用哈希表记录滑动窗口中的每个元素的出现次数。个不同元素的子数组的最大长度,即收集的水果的最大数目。向右移动,移动过程中维护滑动窗口的左端点。,使用当前子数组的长度更新子数组的最大长度。根据收集水果的要求,收集的水果必须是数组。中的一个子数组,且子数组中至多包含。原创 2025-09-04 18:00:00 · 580 阅读 · 0 评论 -
滑动窗口题目:最大连续 1 的个数 III
的最长子数组,将这两个最长子数组的开始下标分别记为。,分别以这两个下标作为结束下标,寻找最多包含。向右移动,移动过程中维护滑动窗口的左端点。,使用当前子数组的长度更新子数组的最大长度。的子数组的最大长度,等价于在最多可以翻转。滑动窗口的左右端点最多各遍历数组。因此,可以使用变长滑动窗口寻找数组。标题:最大连续 1 的个数 III。的最大个数,等价于寻找数组。,确保滑动窗口中最多包含。表示滑动窗口,初始时。中的子数组为最多包含。,最长的子数组长度为。,最长的子数组长度为。的最长子数组的长度。原创 2025-09-01 18:00:00 · 1238 阅读 · 0 评论 -
滑动窗口题目:尽可能使字符串相等
的对应字符之差的绝对值,预计算需要额外空间。的最长子字符串,将这两个最长子字符串的开始下标分别记为。的对应字符之差的绝对值。中的对应字符的开销都是非负数。滑动窗口的左右端点最多各遍历字符串一次。(即两个字符的 ASCII 码值的差的绝对值)。,使用当前子字符串的长度更新子字符串的最大长度。向右移动,移动过程中维护滑动窗口的左端点。中对应的子字符串的最大长度。中对应的子字符串的最大长度。中的子字符串为总开销不超过。中对应的子字符串的最大长度。中对应的子字符串,则返回。中对应的字符,其开销都是。原创 2025-08-28 18:00:00 · 1458 阅读 · 0 评论 -
滑动窗口题目:无重复字符的最长子串
分别以这两个下标作为结束下标,寻找无重复字符的最长子串,将这两个最长子串的开始下标分别记为。为了判断滑动窗口中是否有重复字符,需要使用哈希集合存储滑动窗口中出现的字符。的每个字符作为结束字符的无重复字符的最长子串的长度,以及字符串。的每个字符作为结束字符的无重复字符的最长子串的长度,以及字符串。,使用当前子串的长度更新无重复字符的最长子串的长度。,使用当前子串的长度更新无重复字符的最长子串的长度。中的子串为无重复字符的子串,其长度为。中的子串为无重复字符的子串,其长度为。原创 2025-08-25 18:00:00 · 646 阅读 · 0 评论 -
滑动窗口题目:找到字符串中所有字母异位词
每次将子字符串的下标范围向右移动一位,则有一个字符移出子字符串,有一个字符移入子字符串,更新子字符串中这两个字符的出现次数之后,比较子字符串中的每个字符的出现次数是否与。每次将子字符串的下标范围向右移动一位,则有一个字符移出子字符串,有一个字符移入子字符串,将移出子字符串的字符记为。中的每个字符的出现次数相同,因此可以比较每个字符的出现次数,判断每个子字符串是否为。如果遇到一个子字符串的每个字符的出现次数与。的任意异位词都满足异位词中的每个字符的出现次数与。的首个子字符串中的每个字符的出现次数与。原创 2025-08-21 18:00:00 · 1039 阅读 · 0 评论 -
滑动窗口题目:字符串的排列
每次将子字符串的下标范围向右移动一位,则有一个字符移出子字符串,有一个字符移入子字符串,更新子字符串中这两个字符的出现次数之后,比较子字符串中的每个字符的出现次数是否与。每次将子字符串的下标范围向右移动一位,则有一个字符移出子字符串,有一个字符移入子字符串,将移出子字符串的字符记为。中的每个字符的出现次数相同,因此可以比较每个字符的出现次数,判断每个子字符串是否为。,则子字符串中的每个字符的出现次数没有发生变化,因此不执行任何操作。的首个子字符串中的每个字符的出现次数与。中的每个字符的出现次数相同,则。原创 2025-08-18 18:00:00 · 705 阅读 · 0 评论 -
滑动窗口题目:定长子串中元音的最大数目
的子字符串中可能包含的最大元音字母数,需要遍历每个长度为。移入子字符串,按照以下两步依次更新子字符串中的元音字母数。的子字符串中的元音字母数,以及最大元音字母数。的子字符串,计算子字符串中的元音字母数。是元音字母,则子字符串中的元音字母数减。是元音字母,则子字符串中的元音字母数加。的子字符串中可能包含的最大元音字母数。的子字符串并计算元音字母数。,否则子字符串中的元音字母数不减。,否则子字符串中的元音字母数不加。标题:定长子串中元音的最大数目。需要遍历字符串一次。,当子字符串的下标范围从。原创 2025-08-14 18:00:00 · 752 阅读 · 0 评论 -
滑动窗口题目:爱生气的书店老板
由于原始满意的顾客数量是确定的,为了使满意的顾客数量最多,使用秘密技巧应该使增加的满意的顾客数量最多。需要遍历数组两次,分别计算原始满意的顾客数量以及最多可以增加的满意的顾客数量。当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。中的元素之和,此时满意的顾客数量是原始满意的顾客数量,记为。遍历结束之后,即可得到最多可以增加的满意的顾客数量,记为。如果书店老板不使用秘密技巧,则满意的顾客数量是数组。分钟不生气,增加的满意的顾客数量等于一个长度为。使用秘密技巧可以增加的满意的顾客数量。原创 2025-08-11 18:00:00 · 887 阅读 · 0 评论 -
滑动窗口题目:可获得的最大点数
中的所有卡牌的点数之和是确定的,拿到手中的卡牌的点数之和最大等价于剩余卡牌的点数之和最小。需要遍历数组两次,分别计算数组的元素和以及每个固定长度子数组的元素和。解释:必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和。的元素和,即为获得的点数。时,重复上述过程,计算每一种拿卡牌的方案可以获得的点数。的子数组中的最小点数之和,即可得到可以获得的最大点数。中的所有卡牌的点数之和以及所有长度为。点数是拿到手中的所有卡牌的点数之和。,其余每种方案的计算点数的时间都是。,则从行的开头拿的卡牌下标范围是。原创 2025-08-07 18:00:00 · 883 阅读 · 0 评论 -
滑动窗口题目:大小为 K 且平均值大于等于阈值的子数组数目
为了计算子数组数目,需要维护一个计数。标题:大小为 K 且平均值大于等于阈值的子数组数目。遍历所有的子数组之后,计数值即为平均值大于等于。的子数组,其平均值等于子数组的元素和除以。的子数组数目,即可得到平均值大于等于。个,其中最左侧的子数组的下标范围是。等价于该子数组的元素和大于等于。每次移动子数组的下标范围及更新。是正整数,因此一个长度为。的子数组的平均值大于等于。的子数组的元素和,初始时。的子数组的平均值都小于。只要得到元素和大于等于。的子数组平均值都大于。,当子数组的下标范围从。注意平均值不是整数。原创 2025-08-04 18:00:00 · 1305 阅读 · 0 评论 -
滑动窗口题目:子数组最大平均数 I
的子数组的平均数最大等价于该子数组的元素和最大。只要找到子数组的最大元素和,计算最大元素和除以。遍历所有的子数组之后,即可得到每个子数组的元素和,以及子数组的最大元素和。的连续子数组,并输出该最大平均数。表示子数组的最大元素和,则子数组的最大平均数是。的子数组,其平均数等于子数组的元素和除以。个,其中最左侧的子数组的下标范围是。的商,即可得到子数组的最大平均数。的答案都将被视为正确答案。的子数组的元素和,初始时。标题:子数组最大平均数 I。个元素组成的整数数组。,当子数组的下标范围从。原创 2025-07-31 18:00:00 · 956 阅读 · 0 评论 -
滑动窗口的概念
滑动窗口是用于数组或字符串的一种思想。如果使用滑动窗口,则由于开始下标和结束下标最多从左到右遍历一次,每次移动开始下标或结束下标时可以在常数时间内处理窗口内元素的变化,因此时间复杂度可以降低到。遍历过程中,每次将结束下标向右移动一位,将一个元素移入窗口,然后判断窗口是否符合规则,如果不符合规则,则将开始下标向右移动,直到窗口符合规则或者窗口变为空。滑动窗口适用于数组和字符串,常见应用场景有两种,一是在指定窗口大小的情况下计算极值,二是在指定规则的情况下计算符合规则的最长或最短的连续子序列长度。原创 2025-07-28 18:00:00 · 1275 阅读 · 0 评论
分享