【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
相关推荐
kyle~13 小时前
Python---Flask 轻量级Web框架
开发语言·python·flask
xinhuanjieyi13 小时前
python获取股票分红
chrome·python·elasticsearch
蒟蒻小袁13 小时前
力扣hot-100(一刷自用版)
leetcode·哈希算法·散列表
2401_8480097214 小时前
Redis零基础入门学习
数据库·redis·学习
踩坑记录14 小时前
leetcode ho100 124. 二叉树中的最大路径和 hard
leetcode
喵手14 小时前
Python爬虫实战:小红书热门笔记爬虫实战 - 搜索关键词驱动的内容采集指南!
爬虫·python·爬虫实战·零基础python爬虫教学·小红书热门笔记·搜索关键词·采集小红书热门笔记数据
如果你想拥有什么先让自己配得上拥有14 小时前
全等三角形的判定条件思考
学习·总结
nita张14 小时前
战略定位实战:案例分享与经验总结
大数据·人工智能·python
楠秋92014 小时前
代码随想录算法训练营第三十一天|56. 合并区间 、 738.单调递增的数字、968.监控二叉树
数据结构·算法·leetcode·贪心算法
zenpluck15 小时前
RTAB-Map学习记录(1)--论文阅读
c++·论文阅读·学习·机器人