Leetcode 239. Sliding Window Maximum (python&c++)

Leetcode 239. Sliding Window Maximum

题目:

在这里插入图片描述

解法:deque实现的单调队列

关于单调队列的解释:https://medium.com/algorithms-and-leetcode/monotonic-queue-explained-with-leetcode-problems-7db7c530c1d6
举个例子来说明单调队列,现在有个递减的单调队列[6,4,3]:

  • 新元素为2,队列变为[6,4,3,2]
  • 新元素为5,队列变为[6,5],4,3,2被踢走了
  • 新元素为7,队列变为[7],6,4,3,2被踢走了
    递增则更新逻辑反过来即可

对于这道题目,单调队列使用python中的deque来实现,因为根据题意,当头部元素也就是最大值不在滑窗内的时候,需要去除这个头部元素。又要更新尾部的元素,所以需要双向。
同时,我们还不能用元素的值直接构建单调队列,因为我们需要判断之前的最大值还在不在当前滑窗内。
具体步骤如下:

  • 构建deque,deque中的元素为nums的index,队列中index对应的值递减
  • 对每一步滑窗,进行clean_deque,包括判断当前deque的头部元素是否在滑窗内,从队尾取出小于新元素的值
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        n = len(nums)
        if n*k==0:
            return []
        if k==1:
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值