• 【python刷题】单调队列


    239 滑动窗口的最大值

    class Solution:
        def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
            from collections import deque
            queue = deque()
            res = []
            for i in range(len(nums)):
                if i < k - 1:
                    # 先初始化窗口里面的值
                    queue.append(nums[i])
                else:
                    # 窗口开始移动
                    queue.append(nums[i])
                    res.append(max(queue))
                    queue.popleft()
            return res
    


    尽管我们已经使用了双向队列,但是还是超时了。下面是修改后的代码:

    from collections import deque
    
    class Solution:
        def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
            queue = deque()
            res = []
            # 我们存储的是索引
            for i in range(len(nums)):
                # 如果i >= k且最大值正好位于窗口左端,则将其移除
                if i >= k and i - k == queue[0]:
                    queue.popleft()
                # 如果当前值比queue里面最后的值要大,则删除queue最后的值
                while queue and nums[i] >= nums[queue[-1]]:
                    queue.pop()
                queue.append(i)
                if i >= k-1:
                    # queue中的首位保证是最大值
                    res.append(nums[queue[0]])
            return res
    

    举个例子:
    res = s.maxSlidingWindow([1,3,-1,-3,5,3,6,7],3)
    i: 0
    nums[i]: 1
    queue: [1]
    i: 1
    nums[i]: 3
    queue: [3]
    i: 2
    nums[i]: -1
    queue: [3, -1]
    res: [3]
    i: 3
    nums[i]: -3
    queue: [3, -1, -3]
    res: [3, 3]
    i: 4
    nums[i]: 5
    queue: [5]
    res: [3, 3, 5]
    i: 5
    nums[i]: 3
    queue: [5, 3]
    res: [3, 3, 5, 5]
    i: 6
    nums[i]: 6
    queue: [6]
    res: [3, 3, 5, 5, 6]
    i: 7
    nums[i]: 7
    queue: [7]
    res: [3, 3, 5, 5, 6, 7]

  • 相关阅读:
    js中__proto__和prototype的区别和关系?
    Vue绑定事件v-on(@)与修饰符
    Vue状态(视图共享)管理:Vuex
    Vue UI框架对比:Element UI、Ant Design Vue、iView
    搞清楚Vue-router中的Router、Router实例、Router对象的区别与联系
    Vue-router高级进阶知识
    Vue-router基础知识
    FloatHelper
    scrollHelper
    DialogHelper
  • 原文地址:https://www.cnblogs.com/xiximayou/p/14355672.html
Copyright © 2020-2023  润新知