【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
相关推荐
Navigator_Z13 分钟前
LeetCode //C - 1255. Maximum Score Words Formed by Letters
c语言·算法·leetcode
All for pursuit.17 分钟前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
把头塞进显示器19 分钟前
电商平台-测试报告
python·selenium·pytest
ShyanZh21 分钟前
【Python3基础】01-Python 环境与开发工具
python
醇氧24 分钟前
Git 合并冲突与`__pycache__` 的恩怨情仇
python·numpy·fastapi
曼巴UE532 分钟前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
昌原的儿子LEO33 分钟前
IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置
arm开发·学习
开开心心就好42 分钟前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
乌暮43 分钟前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习
All for pursuit.44 分钟前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode