【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
相关推荐
工程师老罗13 小时前
Pytorch中的优化器及其用法
人工智能·pytorch·python
2301_8223650313 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
luoluoal13 小时前
基于python的人脸识别的酒店客房入侵检测系统(源码+文档)
python·mysql·django·毕业设计·源码
慎独41313 小时前
重置学习系统:唤醒孩子的“双引擎”学习力
学习
子午13 小时前
【2026计算机毕设~AI项目】鸟类识别系统~Python+深度学习+人工智能+图像识别+算法模型
图像处理·人工智能·python·深度学习
木井巳13 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
流㶡13 小时前
网络爬虫库与robots.txt规则
python·网络爬虫
近津薪荼13 小时前
优选算法——双指针专题7(单调性)
c++·学习·算法
2301_7887560613 小时前
Python在2024年的主要趋势与发展方向
jvm·数据库·python
峥嵘life14 小时前
Android 16 EDLA测试STS模块
android·大数据·linux·学习