【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
相关推荐
djjdjdjdjjdj几秒前
CSS实现图片中心剪裁定位_background-position center
jvm·数据库·python
承渊政道几秒前
【递归、搜索与回溯算法】(floodfill算法:从不会做矩阵题,到真正掌握搜索扩散思想)
数据结构·c++·算法·leetcode·矩阵·dfs·bfs
星幻元宇VR1 分钟前
VR禁毒骑行系统,打造互动式禁毒科普新场景
科技·学习·安全·vr·虚拟现实
格鸰爱童话1 分钟前
python录音转文字
开发语言·python
stars-he2 分钟前
数字信号处理实验(1)-抗混叠滤波器
学习·信号处理·dsp开发
Wyz201210243 分钟前
PyTorch bfloat16 张量转 NumPy 的正确方法与替代方案
jvm·数据库·python
weixin_580614008 分钟前
CSS如何制作下拉菜单弹性展开_利用transform-origin
jvm·数据库·python
Mr数据杨9 分钟前
不可学习 ImageNet 二分类实战 从图像识别到训练数据投毒防御
学习·机器学习·分类·数据挖掘·数据分析·kaggle
tobias.b9 分钟前
Centos Linux 维护
linux·python·centos
m0_6178814210 分钟前
如何配置Oracle WebLogic Server的JDBC数据源_JNDI查找与GridLink集群高可用连接池部署
jvm·数据库·python