【python】优先队列-堆 学习 Leetcode 239. 滑动窗口最大值

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

返回 滑动窗口中的最大值 。

示例 1:

输入:nums = 1,3,-1,-3,5,3,6,7, k = 3

输出:3,3,5,5,6,7

示例 2:

输入:nums = 1, k = 1

输出:1

提示:

1 <= nums.length <= 105

-104 <= numsi <= 104

1 <= k <= nums.length

python使用heapq。注意python的heapq在技术上只实现了小顶堆,因此传入的参考值应取负以实现大顶堆。

代码:

python 复制代码
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        # 小顶堆法
        ret_arr = []
        heap = []
        for i in range(k-1):
            heapq.heappush(heap, (-nums[i],i))
        
        for i in range(len(nums)-k+1):
            heapq.heappush(heap, (-nums[i+k-1],i+k-1))
            while(heap[0][1] < i): heapq.heappop(heap)
            ret_arr.append(-heap[0][0])
                
        return ret_arr
相关推荐
小小张说故事6 分钟前
Python 的赋值为什么不会复制对象?拆开引用、浅拷贝与深拷贝
后端·python
東隅已逝,桑榆非晚11 分钟前
红黑树:从概念到实现
数据结构·c++·笔记·学习
ljt272496066132 分钟前
Python笔记(十三)--异常
笔记·python
日日大王学编程35 分钟前
开源Agent项目记忆设计决策对比
python·ai·langchain·开源·ai编程
vipxieliang35 分钟前
Python 魔法方法:让自定义对象更 Pythonic
python
动词ing1 小时前
【学习笔记】动态数码管显示
笔记·学习
陈年老古董1 小时前
ClickHouse 单机搭建记录
hive·笔记·学习·clickhouse·硬件架构
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
雨晨源码(同名B站)1 小时前
深度学习毕业设计选题推荐:基于YOLO11的交通标志检测系统设计与实现(Python+Django+Vue3+对接deepseek)
人工智能·python·深度学习·机器学习·django·课程设计
蓝祁子yoky1 小时前
Qt学习日记 Day15:网络编程(二)- UDP基础
网络·qt·学习