0
点赞
收藏
分享

微信扫一扫

LeetCode239 滑动窗口最大值

九月的栩 2022-03-18 阅读 70
leetcode

本方法主要使用双端队列来降低数据结构的时间复杂度

主要思路就是维护一个储存当前窗口最大值的双端队列,若进来的值大于队列的所有值,那么可以丢弃其他所有值(因为在此最大值出对前或者进入新的最大值之前,滑动窗口中最大值一直是此值),否则出队其他小于当前值的值然后入队。

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        if not nums or k == 0: return []
        res = []
        queue = collections.deque()
        for i in range(k):
            while queue and queue[-1] < nums[i]:
                queue.pop()
            queue.append(nums[i])
        res.append(queue[0])
        for i in range(k, len(nums)):
            if nums[i-k] == queue[0]:
                queue.popleft()
            while queue and queue[-1] < nums[i]:
                queue.pop()
            queue.append(nums[i])
            res.append(queue[0])
        return res
举报

相关推荐

0 条评论