【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
相关推荐
FserSuN1 天前
AI编程 - 规范驱动开发(SDD)学习
驱动开发·学习·ai编程
2501_918126911 天前
stm32做一个次声波检测器,需要哪些元件
stm32·单片机·嵌入式硬件·学习·个人开发
pursuit_csdn1 天前
LeetCode 1022. Sum of Root To Leaf Binary Numbers
算法·leetcode·深度优先
nimadan121 天前
**AI漫剧软件2025推荐,解锁高性价比创意制作新体验**
人工智能·python
GocNeverGiveUp1 天前
大模型学习2-Agent
学习
Bal炎魔1 天前
AI 学习专题一,AI 实现的原理
人工智能·学习
Ro Jace1 天前
分岔机制学习
人工智能·学习·机器学习
踩坑记录1 天前
leetcode hot100 35. 搜索插入位置 medium 二分查找
leetcode
反向跟单策略1 天前
期货反向跟单-2025年回顾及2026年展望
大数据·人工智能·学习·数据分析·区块链
yunhuibin1 天前
GoogLeNet学习
人工智能·python·深度学习·神经网络·学习