【滑动窗口的最大值】给定一个长度为 n 的数组 nums 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。

在这里插入图片描述
【思路1】暴力
【思路2】利用一个队列维护这个窗口,队【0】出总是最大值,当滑到最新的元素时,判断队【0】是否还在窗口中,不在的话将其取出。然后判断最新的元素是否比其前面的大,如果比前面的大则将前面的取出(表示前面的已经没有用了),然后将这个最新的元素加入队,注意每次最新的都要加进去,即使不是最大也要加进去,因为有可能此时不是最大,但随着滑动窗口的滑动,前面比它大的滑出,然后它可能就是最大的了。最后将每个滑动窗口队[0]加如答案。
注意队列存的是下标,并不是值

class Solution:
    def maxInWindows(self, num, size):
        ans=[]
        q=[]
        for i in range(len(num)):
            if len(q)>0 and i-size==q[0]:#判断最大值是否还在滑动窗口中
                q.pop(0)
            while len(q)>0 and  num[i]>=num[q[-1]]:
                q.pop()
            q.append(i)
            if i>=size-1:#相等表示第一个滑动窗口
                ans.append(num[q[0]])
        return ans
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值