欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

滑动窗口最大值,单调队列问题

程序员文章站 2024-02-21 14:19:10
...

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位,返回滑动窗口中的最大值
滑动窗口最大值,单调队列问题

class Solution(object):
    def maxSlidingWindow(self, nums, k):
	res=[]
        window=[]
        if not nums or not k: #如果都为空
            return res
        for i in range(len(nums)):
            if (i<k-1): #这个地方先填充k-1个元素
                self.push(window,nums[i])
            else:
                self.push(window,nums[i]) #填充第三个元素时 开始比较 并且启动单调队列
                res.append(self.getmax(window))
                self.remove(window,nums[i-k+1])
        return res
    def push(self,data,n):
        while(data and data[-1]<n):
            data.pop() #删除前n 个比填入数字小的数组 当前只保存最大的值
        data.append(n)
    
    def getmax(self,data):
        return data[0]
    
    def remove(self,data,n):
        if (data and data[0]==n): #n=nums[i-k+1],即队首元素
            #n表示滑到的队尾元素所对应的队首元素,如果还是最大的,则pop出去,
            #因为下一个push的元素比较的时候,不能再看这个元素了,这是上个窗口的最大值
            data.pop(0)
相关标签: 单调队列