239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

python 复制代码
class Solution(object):
    def maxSlidingWindow(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        length= len(nums)
        if length == 0: return []
        elif length < k: return [max(nums)]
        else:
            from collections import deque
            q = deque()
            res=[]
            for id,num in enumerate(nums):
                #当队列不为空,且队首元素已不在窗口内时,将队首元素弹出
                while q and q[0] <= id-k:
                    q.popleft()
                #当队列不为空,且当前元素大于队尾元素时,将队尾元素弹出
                while q and nums[q[-1]] < num:
                    q.pop()
                #将当前元素入队
                q.append(id)
                if id >= k-1:
                    res.append(nums[q[0]])
            return res        

暴力法非常简单,但是在应对大数据的时候时间超时;

维护一个双端队列,数值从大到小,并且队列里的值存放的是数值的数组下标,而不是数值本身。

队首元素保证是最大元素,也就是说只要队首元素在滑动窗口内,就是最大值。而当不在时,就可以直接弹出,存放到结果集。

而在队尾加入元素时,要保证加入的元素不能比滑动窗口已有的元素大,也就是在加入之前,弹出那些比自己小的元素。

相关推荐
ragnwang6 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go6 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
weixin_307779137 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
云和数据.ChenGuang7 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
荣码10 小时前
长上下文与大文档处理:200页PDF怎么喂给AI,我踩了4个坑
java·python
databook11 小时前
Pandas 与 Polars:语法、性能和资源占用方面的对比
python·数据分析·pandas
威哥爱编程11 小时前
Python 智能体开发实战 10:本地跑得好好的,一并发就崩?把它做成一个能上线的服务
python·agent
威哥爱编程11 小时前
Python 智能体开发实战 09:改了提示词,到底是变好还是变坏?搭一套能打分的离线评测
python·agent
meiying883811 小时前
多快递公司快递单号批量查询接口怎么对接?Python 聚合查询实现
java·大数据·python
Hello_Pyhx12 小时前
Deep-Live-Cam 源码配置思路:环境、模型与执行后端分开排查
python