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

小白如何如何理解滑动窗口最大值问题python

文章目录

      • 题目描述
      • 思路
        • 什么时候弹出元素
        • 什么时候加入元素
      • 代码示例和解释

题目描述

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
举例:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值


[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7

思路

很容易想到暴力求解,遍历数据[i:i+k]取出max最大值即可,但是这种做法容易暴力超时,因此引出了自DIY的队列,主要关注的是什么时候弹出,什么时候加入队列

什么时候弹出元素

1.当遍历个数大于k的时候,弹出queue左侧==nums[i-k]
2.当队列最右侧元素小于nums[i],弹出右侧元素,因为他不可能是最大值了,队列内最多只有k个值,所以遍历到的这个元素才能成为最大值

什么时候加入元素

没遍历一次长度大于k的时候就加元素

代码示例和解释

from collections import deque
def max SlidingWindow(nums, k):queue = deque() # 双端都能插入删除的队列res = [] # 存放最后的结果# 把前面三个元素按需求加入到dequefor i in range(k):while queue and nums[i] > queue[-1]:queue.pop() # 弹出右边的元素,不可能成为最大值deque.append(nums[i])# 从k开始遍历后面的每个元素for i in range(k, len(nums)):# 只有遍历到的元素queue[0]等于nums[i-k]才需要弹出元素if queue and queue[0] == nums[i-k]:queue.popleft()while queue and queue[-1] < nums[i]:queue.pop()queue.append(nums[i])res.append(queue[0]) # 加入最大值return res

*[注意点]:queue内部的元素个数一定是小于等于k的,比如k = 3的时候,因为遍历到长度第4个元素,如果queue首元素和nums[i-k]元素相等就会有pop操作,即使不相等,其他需要pop()的元素也会被push的过程弹出,所以queue的长度始终不可能大于k

http://www.lryc.cn/news/357178.html

相关文章:

  • Linux--进程间通信(2)(有名管道)
  • window自动启动bat文件
  • 2024年蓝桥杯Web开发【大赛大纲】15届
  • 【vue-cli搭建vue项目的过程2.x】
  • Android 生成正式版密钥库 KeyStore
  • POLARDB:新零售用户MySQL上云最佳选择
  • PHP MySQL图解学习指南:开启Web开发新篇章
  • uniapp一些问题解决
  • 数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局
  • 关于APM32F407配置串口DMA收发没有数据的问题记录
  • 基于python实现的深度学习web多格式纠错系统
  • UE5文件操作
  • element plus 去掉select选择框的边框,并修改右侧图标
  • Ceph KernelFuse GetSet Quota
  • JVM学习-字节码指令集(二)
  • 解密网络流量监控:优化IT运维的利器
  • oracle 分区表常用语句(2)
  • Python函数式编程进阶:用函数实现设计模式
  • Ingress controller:Kubernetes 的瑞士军刀
  • uniapp tabBar app页面滚动闪屏的问题
  • 【计算机毕业设计】388微信小程序足球赛事及队伍管理系统
  • 监控易监测对象及指标之:华为FusionInsight Kafka服务全方位监控
  • Python装饰器的应用
  • 【数据结构与算法 | 基础篇】力扣232, 225
  • 内网(极空间)搭建gitlab跳板机转发端口及域名配置
  • 如何知道自己电脑的 Shell类型是什么?
  • Axios的使用简单说明
  • 查找list集合中,持续时间>=ContinueTime的数据集合,保存在新的list中
  • nginx 反向代理配置详解
  • 微信小程序毕业设计-农场驿站平台系统项目开发实战(附源码+论文)