【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
相关推荐
田梓燊4 分钟前
力扣:138.随机链表的复制
算法·leetcode·链表
itzixiao15 分钟前
L1-054 福到了(15 分)[java][python]
java·python·算法
斯维赤20 分钟前
Python学习超简单第十一弹:邮件发送
开发语言·python·学习
qq_3721542321 分钟前
如何配置表中某列的排序权重_全文索引配置与权重分配
jvm·数据库·python
还是阿落呀29 分钟前
如何判断一个年份是否为闰年?
python
2501_9142459332 分钟前
CSS如何使用-nth-of-type精确选择列表项_通过元素类型限制提升样式健壮性
jvm·数据库·python
overmind34 分钟前
oeasy Python 124 序列_字符串_string_str
开发语言·python
吕源林39 分钟前
Golang如何做本地缓存加速_Golang本地缓存教程【核心】
jvm·数据库·python
_深海凉_40 分钟前
LeetCode热题100-26. 删除有序数组中的重复项
python·算法·leetcode
武帝为此41 分钟前
【热卡填充法介绍】
人工智能·python·机器学习