【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
相关推荐
whcyhhh7 小时前
头歌实践教学平台:大数据存储2023(十三3)
大数据·开发语言·python
Navigator_Z7 小时前
LeetCode //C - 1220. Count Vowels Permutation
c语言·算法·leetcode
AR-26710-7 小时前
机器学习复习Day8——异常检测
人工智能·python·机器学习·scikit-learn
千里码aicood7 小时前
Django 基于Django的电脑推荐与分析可视化系统设计与实现
python·django·电脑
吃好睡好便好7 小时前
判断函数的使用
学习·算法·matlab·生活·判断函数
未若君雅裁7 小时前
Agent 的结构化输出,ProviderStrategy、ToolStrategy 与错误重试
python·langchain
洛兮银儿7 小时前
pycharm选中同一个词的标记颜色的修改
ide·python·pycharm
feilieren7 小时前
leetcode - 389. 找不同
算法·leetcode
郝学胜_神的一滴8 小时前
Effective Python 条款 6:善用拆包告别恼人的下标索引
python·pycharm
汤姆yu8 小时前
基于Django的学习资料共享与智能推荐系统
后端·python·django·毕业设计·学习资料共享