【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
相关推荐
BIGSHU09231 分钟前
java多线程场景3-并发处理和异步请求
java·开发语言·python
Source.Liu7 分钟前
【Python自动化】 21.3 Pandas Series 核心数据结构完全指南
python·自动化·pandas
Sirius Wu23 分钟前
私有化部署Ragflow的预训练模型
人工智能·python·语言模型·火山引擎
惊鸿.Jh29 分钟前
1733. 需要教语言的最少人数
算法·leetcode
Mr_sun.1 小时前
Day04_苍穹外卖——套餐管理(实战)
开发语言·python
南棱笑笑生1 小时前
20250910在荣品RD-RK3588-MID开发板的Android13系统下修改短按power按键的休眠/唤醒为关闭/打开背光
开发语言·python·rockchip
悠悠~飘1 小时前
php学习(第二天)
开发语言·学习·php
zgc12453671 小时前
汇编基础1
汇编·学习
java1234_小锋2 小时前
Scikit-learn Python机器学习 - 分类算法 - 线性模型 逻辑回归
python·机器学习·scikit-learn
倔强的石头_2 小时前
你的 Python 为什么“优雅地慢”?——读《极速Python:高性能编码、计算与数据分析》
python