Gsupl.落浅~zbxGsupl.落浅~

09:36:05 AM

西雅图

LeetCode算法—滑动窗口

Gsupl.落浅·2024-09-11 21:29·36 次阅读

LeetCode算法—滑动窗口

一:滑动窗口

滑动窗口分为定长滑动窗口和非定长滑动窗口

定义:滑动窗口的题目一般都是非定长的;一般需要定义两个指针left,right;用来限制窗口的左边界和右边界;


二:LeetCode

209 长度最小的数组

(1)题目:求连续最小的字串和大于目标值的最小长度

(2)思路:定义两个指针;left和right;定义sum表示窗口中的元素的和;min_length表示窗口中满足条件的字串的长度;然后遍历数组;填充窗口中的元素;当窗口中的元素大于目标值的时候;说明需要调整窗口;于是记录当前窗口的长度;然后将窗口左边第一个元素的值删除掉;left指针向前移动一位;继续判断;直至小于目标值的时候说明当前的长度就是满足条件的最小长度;返回mix_length的值;如果不存在直接返回0

Copy
def func(nums,target): left=0 sum=0 min_length=float('inf') for right in range(len(nums)): sum+=nums[right]#填充窗口 while sum>=target:#滑动的条件 min_length=min(min_length,right-left+1) sum-=nums[left]#弹出左端第一个元素 left+=1 return min_length if min_length!=float('inf') else 0

1456 定长字符串中元音的最大数目

(1)题目:请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数

(2)思路:首先记录前k的字符中元音字符的数量;然后利用滑动窗口;如果当前的窗口左端的元素为元音字母;那么count-1;入宫窗口的右端的元素为元音字母,count+1;然后取最大的值返回即可

Copy
def func(s,k): count=0 vowels=('aeiou') for i in range(k): if i in vowels: count+=1 max_count=count for i in range(k,len(s)): if s[i-k] in vowels: count-=1 if s[i] in vowels: count+=1 max_count=max(max_count,count) return max_count

16 无重复字符串的最长字串

(1)思路:滑动窗口的题目首先需要定义两个指针left,right;right用于遍历字符串;定义max_length用于记录当前字串的长度;

(2)核心:如果窗口右边的元素不在集合中;加入到集合中;如果在集合中;说明左边的元素重复了;于是删除窗口左边的元素并且left指针向右移动;动态调整滑动窗口的大小;最后返回max_length

Copy
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: left = 0 window = set() # 使用集合来存储窗口中的字符 max_length = 0 for right in range(len(s)): # 如果当前字符已经在窗口中,移动左指针以缩小窗口 while s[right] in window: window.remove(s[left]) left += 1 # 将当前字符添加到窗口中 window.add(s[right]) # 更新最大长度 max_length = max(max_length, right - left + 1) return max_length

485 最大连续1的个数

Copy
class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: max_count = 0 # 记录最大连续 1 的数量 count = 0 # 当前窗口中的连续 1 的数量 for num in nums: if num == 1: count += 1 max_count = max(max_count, count) # 更新最大值 else: count = 0 # 遇到 0 时重置计数器 return max_count
posted @   Gsupl.落浅~  阅读(36)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航

一:滑动窗口
二:LeetCode