【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
相关推荐
2301_7811435615 分钟前
C语言学习笔记
笔记·学习
渔阳节度使37 分钟前
SpringAI实时监控+观测性
后端·python·flask
铁手飞鹰40 分钟前
Visual Studio创建Cmake工程导出DLL,通过Python调用DLL
android·python·visual studio
飞Link1 小时前
告别盲目找Bug:深度解析 TSTD 异常检测中的预测模型(Python 实战版)
开发语言·python·算法·bug
7yewh1 小时前
jetson_yolo_deployment 02_linux_dev_skills
linux·python·嵌入式硬件·yolo·嵌入式
Alphapeople2 小时前
Isaac Sim学习
学习
蒸蒸yyyyzwd2 小时前
高并发40问学习笔记
笔记·学习
love530love2 小时前
ComfyUI rgthree-comfy Image Comparer 节点无输出问题排查与解决
人工智能·windows·python·comfyui·rgthree-comfy·nodes 2.0·vue 节点
badhope2 小时前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
用户0332126663673 小时前
使用 Python 复制 Excel 工作表
python