定长滑动窗口
总结:入-更新-出。
入:下标为 i 的元素进入窗口,更新相关统计量。如果 i<k−1 则重复第一步。
更新:更新答案。一般是更新最大值/最小值。
出:下标为 i−k+1 的元素离开窗口,更新相关统计量。
# 1456. 定长子串中元音的最大数目
# 算是标准的定长滑动窗口模板了
class Solution:
def maxVowels(self, s: str, k: int) -> int:
ans = 0
num_vowels = 0
for right, c in enumerate(s):
if c in 'aeiou':
num_vowels += 1 # 第一步:入
if right < k-1: # 窗口长度没达到k时,就重复第一步
continue
ans = max(ans, num_vowels) # 更新最值
if s[right-k+1] in 'aeiou': # 第三步:出
num_vowels -= 1
return ans
2025-4-14
1456. 定长子串中元音的最大数目 1263
643. 子数组最大平均数 I
1343. 大小为 K 且平均值大于等于阈值的子数组数目 1317
2090. 半径为 k 的子数组平均值 1358
2025-4-15
2379. 得到 K 个黑块的最少涂色次数 1360
2841. 几乎唯一子数组的最大和 1546
2461. 长度为 K 子数组中的最大和 1553
1423. 可获得的最大点数 1574(逆向思维,计算长度为n-k的滑动窗口)
2025-4-16进阶
3439. 重新安排会议得到最多空余时间 I 1729
2134. 最少交换次数来组合所有的 1 II 1748
1297. 子串的最大出现次数 1748
2653. 滑动子数组的美丽值 1786