【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
相关推荐
Frostnova丶2 分钟前
LeetCode 3070. 元素和小于等于 k 的子矩阵数目
算法·leetcode·矩阵
happymaker06265 分钟前
web前端学习日记——DAY01(HTML基本标签)
前端·学习·html
FC皇家慕尼黑10 分钟前
Claude Code学习--从搭建Nano Claude Code学习CC机制的底层原理pt2
学习·ai·claude code
handler0118 分钟前
基础算法:分治
c语言·开发语言·c++·笔记·学习·算法·深度优先
代码探秘者32 分钟前
【大模型应用】4.分块之六大策略
java·数据结构·后端·python·spring
码喽7号32 分钟前
Springboot学习六:MybatisPlus的多表查询以及分页查询
java·spring boot·学习
不想看见40433 分钟前
Implement Queue using Stacks栈和队列--力扣101算法题解笔记
笔记·算法·leetcode
艾莉丝努力练剑35 分钟前
【MYSQL】MYSQL学习的一大重点:数据库基础
linux·运维·服务器·数据库·c++·学习·mysql
齐齐大魔王40 分钟前
虚拟机网络无法连接
linux·网络·c++·python·ubuntu
ycjunhua44 分钟前
Notebooklm for windows本地安装使用
python·webstorm