【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
相关推荐
飞霄不推销5 分钟前
SPI驱动学习(2)
学习
GISer_Jing9 分钟前
考研|考公GIS:近5年地理信息产业数据全链路核心要点(背诵版)
学习·考研·arcgis
脉动数据行情23 分钟前
Python 实现融通金行情数据对接(实时推送 + K 线 + 产品列表)
开发语言·python
wltx168839 分钟前
谷歌SEO如何做插床优化?
大数据·人工智能·python
khalil10201 小时前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
2301_781571421 小时前
JavaScript中Object-getOwnPropertySymbols获取方法
jvm·数据库·python
坚持是一种态度1 小时前
软考高级架构师选择题知识点高频100
学习·架构师·软考·考试
he___H1 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
yxc_inspire1 小时前
25年CCPC福建邀请赛补题
学习·算法
Slow菜鸟1 小时前
Skill 学习篇(十)| 编排框架 · 五大编排框架 · 全方位决策指南
学习