当前位置: 首页 > article >正文

力扣:239. 滑动窗口最大值

题目:

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

提示:

  • 1 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4
  • 1 <= k <= nums.length

代码实现及思路: 

from collections import deque

# 自定义队列
class MyQueue:
    def __init__(self):
        # 创建一个双端队列 作为基本数据结构
        self.queue = deque()

    def pop(self, value):
        # 当队列的头节点值和传入值相等 就把那个节点pop
        if self.queue and value == self.queue[0]:
            self.queue.popleft()

    def push(self, value):
        # 对尾部进行处理,保留递减数组
        while self.queue and value > self.queue[-1]:
            self.queue.pop()
        # 把每次滑动的新数加入尾部
        self.queue.append(value)

    def get_max(self):
        # 返回最大值即头部的节点
        return self.queue[0]


class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        que = MyQueue()
        res = []
        # 先将前k的元素放入队列
        for i in range(k):
            que.push(nums[i])
        res.append(que.get_max())
        # 遍历后面元素
        for i in range(k, len(nums)):
            #窗口向右移动,弹出队列中不在窗口内的元素
            que.pop(nums[i - k])
            #向队列添加元素
            que.push(nums[i])
            # 记录当前窗口最大值
            res.append(que.get_max())
        return res

时间和空间复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(k)

 


http://www.kler.cn/news/148791.html

相关文章:

  • 随时随地,打开浏览器即可体验的在线PS编辑器
  • CVPR 2023 精选论文学习笔记:UniSim A Neural Closed-Loop Sensor Simulator
  • 【读论文】【泛读】S-NERF: NEURAL RADIANCE FIELDS FOR STREET VIEWS
  • 聊聊Go语言的注释
  • 充电桩一些标准和协议介绍
  • asp.net core构造函数注入
  • Python爬虫入门:如何设置代理IP进行网络爬取
  • mysql 性能排查
  • 【论文阅读笔记】Prompt-to-Prompt Image Editing with Cross-Attention Control
  • MATLAB算法实战应用案例精讲-【人工智能】机器人指令编辑
  • 第一百八十三回 如何给图片添加阴影
  • 00.本地搭建 threejs 文档网站(网页版是外网比较慢)
  • redis运维(十九)redis 的扩展应用 lua(一)
  • Android:FragmentTransaction
  • a-range-picker 时间选择器的默认日期显示,日期格式化
  • OMP: Error #15: Initializing libiomp5md.dll
  • C语言——求π的近似值
  • 第八节HarmonyOS @Component自定义组件的生命周期
  • 【Qt之QSqlTableModel】介绍及使用
  • u-popup组件在UniApp中的讲解
  • Unity 关于生命周期函数的一些认识
  • 【创建一个组件并通过npm让其他人安装和调用】
  • 【数据结构】排序效率最优解之一:二叉树-堆
  • .netcore 获取appsettings
  • Leetcode—58.最后一个单词的长度【简单】
  • Linux处理文件常见命令
  • 基于合成数据的行人检测AI模型训练
  • 火柴人版王者-Java
  • java使用freemarker模板生成html,再生成pdf
  • 利用Spring Boot构建restful web service的详细流程