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

单调队列应用介绍

单调队列应用介绍

  • 定义
  • 应用场景
  • 实现模板
  • 具体示例
    • 滑动窗口最大值
      • 问题描述
      • 问题分析
      • 代码实现
    • 带限制的子序列和
      • 问题描述
      • 问题分析
      • 代码实现
    • 跳跃游戏
      • 问题描述
      • 问题分析
      • 代码实现

定义

队列(Queue)是另一种操作受限的线性表,只允许元素从队列的一端进,另一端出,具有先进先出(FIFO)的特性。但**单调队列(Monotonic Queue)**是一种特殊的队列,它首先是一个双端队列(可在队头/队尾进行读写),其次队列内部的元素单调递增/递减。

单调队列具有以下特性:

  • 当前最优解在队头
  • 插入元素都是从队尾插入
    • 会剔除队尾不符合单调性的元素(类似栈的出栈动作)
    • 会弹出队头不满足区间限制的元素(单调队列解决的问题一般都带有区间限制)

因此,可以把 单调队列看作是 滑动窗口 和 单调栈 的组合体。

应用场景

  • 解决滑动窗口的最值问题
    比如滑动窗口内的最大值问题
    滑动窗口最大值

  • 适用于最优化DP(动态规划)算法中动态规划转移,对应的动态转移方程类似 f ( i ) = max ⁡ l < = j < = r ( f ( j ) + b ( j ) + a ( i ) ) = max ⁡ l < = j < = r ( f ( j ) + b ( j ) ) + a ( i ) f(i) = \max_{l<=j<=r}(f(j) + b(j) + a(i)) = \max_{l<=j<=r}(f(j) + b(j)) + a(i) f(i)=l<=j<=rmax(f(j)+b(j)+a(i))=l<=j<=rmax(f(j)+b(j))+a(i),其中 max ⁡ l < = j < = r ( f ( j ) + b ( j ) ) \max_{l<=j<=r}(f(j) + b(j)) l<=j<=rmax(f(j)+b(j


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

相关文章:

  • 2024四非保研回忆录(天大、华师、东南、华科)
  • 10.7每日作业
  • 数据工程师岗位常见面试问题-2(附回答)
  • 力扣 简单 100.相同的树
  • Linux数据备份
  • GSLAM——一个通用的SLAM架构和基准
  • 【强训笔记】day27
  • 【Qt笔记】QFrame控件详解
  • AtCoder ABC373 A-D题解
  • YOLO11改进|上采样篇|引入CARAFE上采样模块
  • Leecode热题100-560.和为k的子数组
  • Golang | Leetcode Golang题解之第449题序列化和反序列化二叉搜索树
  • 如何查看NVIDIA Container Toolkit是否配置成功
  • 《数据结构》学习系列——树
  • ssh连接阿里云长连接
  • Django学习笔记十四:系统框架总结
  • 日常记账:解锁生活财务管理的秘密钥匙
  • 大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端
  • Win10 IDEA连接虚拟机中的Hadoop(HDFS)
  • idea配置注释