滑动窗口模板

  1. 本质上来说,滑窗是双指针,一根指针指向左端点,一根指针指向右端点。
  2. 右指针移动可以表示扩张窗口,左指针移动表示缩小窗口。
  3. 如果当前元素满足题目要求时,可以挪动右指针尝试更优解,并且更新需要记录的变量(元素,元素个数++等)
  4. 如果当前窗口内的元素不满足条件,可以挪动左指针尝试调整,并且更新需要记录的变量(元素,元素个数--等)
  5. 通过以上步骤窗口就开始“滑动”起来,在滑动过程中,要记得及时更新答案。一般为求最大或最小。
class Solution:
    def slidingWindowTemplate(self,nums: List[int],...) -> int:
        # 输入参数有效性判断
        if not nums:
            return 0
        # 申请一个散列,用于记录窗口中具体元素的个数情况
        # 这里用数组的形式呈现,也可以考虑其他数据结构
        need = []

        # 预处理(可省), 一般情况是改变 hash
        hashmap = defaultdict()

        # left 表示左指针
        # count 记录当前的条件,具体根据题目要求来定义
        # result 用来存放结果
        left= 0
        count = ...
        result = ...
        n = len(nums)

        for end in range(n):
            # 更新新元素在散列中的数量
            hashmap[nums[i] = ...
            # 根据窗口的变更结果来改变条件值
            if(need[S[i]] == ...) {
                count++
            }
            # 如果当前条件不满足,移动左指针直至条件满足为止
            while (count > K || ...) : 
                ...
                if (...) :
                    count--

                need[A[left]]++
                left++
            # 更新结果
            results = ...
        
        return results;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值