【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
相关推荐
Cloud_Shy618几秒前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第八章 使用读写包操作 Excel 文件 下篇)
python·数据分析·excel·numpy·pandas
tryCbest4 分钟前
Flask vs FastAPI 全方位对比与实战
python·flask·fastapi
测试员周周7 分钟前
【Appium 系列】第04节-Page Object 模式 — BasePage 基类设计
开发语言·数据库·人工智能·python·语言模型·appium·web app
无限中终7 分钟前
如何抓取某音视频的互动数据
爬虫·python
吃着火锅x唱着歌10 分钟前
LeetCode 496.下一个更大元素I
算法·leetcode·职场和发展
坐吃山猪14 分钟前
Python34_装饰器知识
开发语言·python·ubuntu
ZHW_AI课题组14 分钟前
调用华为智能云API实现手写图片识别
图像处理·python·机器学习·华为·分类
weixin_6600967814 分钟前
【无标题】
python·debugpy
Fanfanaas15 分钟前
Linux 系统编程 文件篇 (一)
linux·运维·服务器·c++·学习
小草cys15 分钟前
Anaconda 的虚拟环境(envs)从默认的 C 盘迁移到其他磁盘
开发语言·python·anaconda