【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
相关推荐
幸福在路上wellbeing6 分钟前
AI 智能体开发 · Day 1 详细学习手册
人工智能·学习
phltxy6 分钟前
LangChain_Agent中间件实战
人工智能·python·深度学习·语言模型·中间件·langchain
xian_wwq12 分钟前
【学习笔记】框架层坍缩——LangChain 们正在被重新定义-14/15
笔记·学习·langchain
Frostnova丶12 分钟前
(19)LeetCode 54. 螺旋矩阵
算法·leetcode·矩阵
axinawang14 分钟前
第14课:查找、统计、分割字符串
python
Frostnova丶16 分钟前
(18)LeetCode 73. 矩阵置零
算法·leetcode·矩阵
倒流时光三十年19 分钟前
第一阶段 02 · Mapping 与数据类型(text vs keyword 是重点)
后端·python·django
小大宇23 分钟前
python蓝图、拦截器、异常处理、redis队列、线程池、控制台及日志文件输出
python
喝茶与编码41 分钟前
真实业务场景:高并发 Upsert 死锁频发?InnoDB 锁机制与重试机制深度解析
数据库·python
吃好睡好便好1 小时前
Creo中工作目录的设置
学习·creo·工作目录