【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 <= nums[i] <= 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
相关推荐
wj30558537820 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
吃好睡好便好20 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李20 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
nashane21 小时前
HarmonyOS 6学习:CapsLock键失效诊断与长截图完整实现指南
学习·华为·harmonyos
qingfeng1541521 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
xian_wwq1 天前
【学习笔记】AGC协调控制系统概述
笔记·学习
憧憬成为java架构高手的小白1 天前
docker学习笔记(基于b站多个视频学习)【未完结】
笔记·学习
彦为君1 天前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
辰海Coding1 天前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构