【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
相关推荐
mm9954207 小时前
PMI三大证书:PMP、PgMP、PfMP证书对比
学习·职场和发展·项目管理·学习方法·pmp
Metaphor6927 小时前
使用 Python 添加、隐藏和删除 PDF 图层
python·pdf·图层
兰令水7 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
丨白色风车丨7 小时前
【Python 计算机视觉】基于 Dlib+OpenCV 实现实时人眼疲劳检测(闭眼预警)
python·opencv·计算机视觉
Tisfy7 小时前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
铅笔侠_小龙虾7 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust
嘘嘘出差8 小时前
Python 爬虫入门实战:爬取豆瓣电影 Top 250
开发语言·爬虫·python
猪头少年不会遇见算法学姐8 小时前
Makefile快速上手笔记
linux·学习
爱写代码的倒霉蛋8 小时前
实现协程的三种方式
开发语言·python
罗超驿8 小时前
双指针算法详解:从入门到精通(Java版)
算法·leetcode·职场和发展