【LeetCode基础算法】滑动窗口与双指针

定长滑动窗口

总结:入-更新-出。
入:下标为 i 的元素进入窗口,更新相关统计量。如果 i 更新:更新答案。一般是更新最大值/最小值。
出:下标为 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

不定长滑动窗口

你可能感兴趣的:(算法,leetcode,python)