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

代码随想录 -- 栈与队列 -- 滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode)

思路:

采用自定义单调队列

单调队列主要的三个函数:push()  pop()  getMax()

1. push(val)

如果队列非空:当 val 比队尾元素大时,删除队尾元素,直到队尾元素比 val 大,将 val 加入队尾

2. pop(val)

如果要删除的元素在队首,删除队首元素;否则不需要删除

3. getMax()

返回队首元素

主函数实现

1. 将前 k 个元素先加入队列中,并找出第一次滑动窗口的最大值加入 res 数组

2. 从 nums 第二个元素开始遍历,删除第 i-1 个元素,加入第 i+k-1 个元素,将本次滑动窗口最大值加入 res 数组

class MyQueue(object):def __init__(self):self.queue=deque()def push(self,val):# while len(self.queue)!=0 and self.queue[0]<val:#     del self.queue[0]while len(self.queue)!=0 and self.queue[-1]<val:del self.queue[-1]self.queue.append(val)def pop(self,val):if val==self.queue[0]:del self.queue[0]def getMax(self):return self.queue[0]class Solution(object):def maxSlidingWindow(self, nums, k):de1=MyQueue()res=[]for i in range(0,k):de1.push(nums[i])res.append(de1.getMax())for i in range(1,len(nums)-k+1):de1.pop(nums[i-1])de1.push(nums[i+k-1])res.append(de1.getMax())return res


http://www.mrgr.cn/news/18097.html

相关文章:

  • 20240903 每日AI必读资讯
  • vue2.0中ts中vuex模块化如何使用
  • 完美解决LBP2900打印机安装驱动提示无法识别USB及连接错误等问题(附Win11全新安装支持及卸载方案)
  • 【GeoSceneWebAdaptor】
  • Cobalt Strike 4.8 用户指南-第五节-获取初始访问
  • Java 技术教程:@JsonInclude(JsonInclude.Include.NON_EMPTY) 注解详解
  • 情感分析——中文金融情感词典
  • CommonJS与ESModule标准
  • redisson RMap和RMapCache的区别
  • 2024年,人工智能行业哪些证书权威?
  • 【微信小程序入门】2、微信小程序开发前准备
  • echarts处理y轴最大小值根据数据动态处理、分割数和是否从0开始
  • Java学习第六天
  • 用相图分析 bbr,inflight 守恒的收敛速度
  • 世界上最快的端口扫描器masscan,如何使用?如何进行分布式使用部署?如何集成到web系统?
  • 【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存
  • 2025毕业季:如何用Java SpringBoot构建医疗就诊平台?掌握最新技术,开启医疗信息化大门
  • 盲盒小程序开发,探索市场发展优势
  • 多看书,一年顶十年!(码农必读书单)
  • 多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)