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

LeetCode 239. 滑动窗口最大值(单调队列)

 题目传送门:239. 滑动窗口最大值 - 力扣(LeetCode)

题意就是求每个窗口内的最大值,返回一个最大值的数组,滑动窗口的最值问题。

做法:维护一个单调递减队列,队头为当前窗口的最大值。

设计的单调队列在入队、出队操作时满足如下规则:

  • 入队:新元素入队前,如果队尾元素大于要插入的新元素,那么就出队。就这样移除掉所有比插入的元素小的值。
  • 出队:检查队头元素是否超出窗口范围(下标 <= i - k),若超出则移除。

每次窗口形成后,队头元素即位窗口的最大值。

注:

  • 存储下标而非值,便于判断元素是否过期(该元素是否还在窗口中,窗口移动时需移除左边元素,i - k即为当前窗口的最左边元素下标)。
  • 结果数组长度 = 窗口滑动次数 = n - k + 1。n - k理解为减去刚开始的窗口元素还有n-k的元素需要进窗口,然后再加上第一次的窗口(没移动,也可以理解为窗口刚移动到数组)。
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if (nums == null || nums.length < k || k <= 0) {return new int[0];}int n = nums.length;int[] res = new int[n - k + 1];Deque<Integer> q = new ArrayDeque<>();for (int i = 0; i < n; i++) {while (!q.isEmpty() && q.peekFirst() <= i - k) {q.pollFirst();}while (!q.isEmpty() && nums[q.peekLast()] < nums[i]) {q.pollLast();}q.offerLast(i);if (i >= k - 1) {res[i - k + 1] = nums[q.peekFirst()];}}return res;}
}

 以 nums = [1,3,-1,-3,5], k=3 为例,算法的执行流程为:

当前元素窗口单调递减队列(下标)最大值操作说明
i = 0 nums[0] = 1[1][0]-初始入队
i = 1 nums[1] = 3[1, 3][1]-移除0(1 < 3),1入队
i = 2 nums[2] = -1[1, 3, -1][1, 2]32入队,记录队头nums[1] = 3
i = 3 nums[3] = -3[3, -1, -3][1, 2, 3]33入队,队头未过期
i = 4 nums[4] = 5[-1, -3, 5][4]5移除比5小的

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

相关文章:

  • 华为云Flexus+DeepSeek征文|DeepSeek-V3/R1开通指南及使用心得
  • 鸿蒙图片缓存(一)
  • 运行示例程序和一些基本操作
  • 学习数字孪生,为你的职业发展开辟新赛道
  • WebRTC源码线程-1
  • python学习打卡day47
  • MySQL中的内置函数
  • Ansible自动化运维全解析:从设计哲学到实战演进
  • YOLOv8n行人检测实战:从数据集准备到模型训练
  • 国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营
  • 网络寻路--图论
  • LangChain4j 学习教程项目
  • 【Go语言基础【15】】数组:固定长度的连续存储结构
  • 【读论文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷积神经网络
  • Komiko 视频到视频功能炸裂上线!
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • vite+tailwind封装组件库
  • Gin框架实战指南:从入门到进阶
  • 【Java学习笔记】包装类
  • 【高效开发工具系列】Blackmagic Disk Speed Test for Mac:专业硬盘测速工具
  • QtDBus模块功能及架构解析
  • 光学字符识别(OCR)理论概述与实践教程
  • 关键字--sizeof
  • Ubuntu20.04启动python的虚拟环境
  • 网页在线客服系统自动欢迎语实现方案(PHP+MySQL)
  • UniRig:如何在矩池云一站式解决 3D 模型绑定难题
  • 用函数实现模块化程序设计(适合考研、专升本)
  • 玩转抖音矩阵:核心玩法与高效运营规则
  • spring:继承接口FactoryBean获取bean实例
  • 字符串字典序最大后缀问题详解