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        

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

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

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

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

相关推荐
weixin_3077791312 分钟前
Databricks里用PySpark统计指定表和字段中各字段的空值、空字符串或零值比例
运维·数据仓库·python·spark·云计算
海兰17 分钟前
【 Python 量化交易】第6章:数据可视化
开发语言·python·信息可视化
多多鼠18 分钟前
Tool Calling的信任边界:从协议校验到执行沙箱的完整链路设计
运维·开发语言·网络·人工智能·python·langchain
Jazz_z34 分钟前
使用 Python 合并与取消合并 Excel 单元格
开发语言·python·excel
Lenyiin35 分钟前
第6篇_Python高级语法与标准库精髓:从会用到达精通
java·python·html
ZGG00342 分钟前
真题拆解 05:ReAct 还是 Plan-and-Execute——规划范式怎么选
python·agent·react
quantdash_cc1 小时前
量化数据管道为什么会出现历史 K 线缺口?从 API 请求到数据质量的完整排查方法
开发语言·python·数据分析·量化·股票数据·quantdash
用户77833661321116 小时前
用 React Hook 封装搜索数据:useSerp 的防抖、缓存与错误处理
python·api
65岁退休Coder20 小时前
LangGraph v1.2.9 节点容错策略 & 流式输出 & 持久化记忆管理
后端·python·langchain