【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
相关推荐
传奇开心果编程3 分钟前
【Rust入门练中学】 第3课:数据类型
开发语言·学习·rust
这料鬼有毒10 分钟前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
humors22114 分钟前
今年我正在看、看完和还没看的书单(不定期更新)
学习·阅读·读书·书单·书籍
TomEval24 分钟前
【测AI】第02篇:Python 环境搭建与基础语法速通
人工智能·python·功能测试·aigc
归去来 兮32 分钟前
LangChain从入门到精通
python·langchain·langgraph
泡泡鱼(敲代码中)37 分钟前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
淘气的小猴子1 小时前
Python 魔术方法入门
python
爱吃苹果的日记本1 小时前
数据结构第五课
数据结构·学习
我要见SA姐11 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
ide·vscode·python·自动化·编辑器
沉下心来学鲁班2 小时前
初识DeepAgents搭建第一个智能体
人工智能·python·langchain