zoukankan      html  css  js  c++  java
  • 单调栈&单调队列

    最近打了三场比赛疯狂碰到单调栈和单调队列的题目,第一,二两场每场各一个单调栈,第三场就碰到单调队列了。于是乎就查各种博客,找单调栈,单调队列的模板题去做,搞着搞着发现其实这两个其实是一回事,只不过利用了容器内元素单调的不同特性,用来加速处理不同的问题。

    单调栈解决的是以某个值为最小(最大)值的最大区间,维护的是左右两边第一个比当前位大或者小的数

    单调队列解决的是区间最小(最大)值,维护的是区间内的最值

    举个栗子,a[i] = { 1,6,3,5,1,2,4 }

    如果容器内数字是单调递减的,最后得到的容器为{ (6, 2),(5, 4) ,(4, 7) }

    我们来看下,此时容器给我们反馈的信息是什么

    (1)4左边第一个比它大的值是5

    (2)1~7间的最大值是6,3~7间的最大值是5,5~7间的最大值是7

    这两条都是容器扫描完a[]最后一个元素后得出来的结论,只不过第一条用于求解以某个值为最小(最大)值的最大区间,第二条用于求解区间最小(最大)值,由于有时候区间的长度要做限制,因此需要能在两端进行操作的容器,故用双向队列deque,另外一个为了方便起见就用栈

    ps:建议做过适量的题目后再来体会这番话,不然很容易懵

  • 相关阅读:
    鸿合爱学班班.kl课件转ppt课件
    Mac下Android Studio添加忽略文件的方法
    Android中处理PPI
    Mac下配置全局gradlew命令
    Application启动图
    图像合成模式XferMode
    path绘制
    drawArc 画扇形 画弧线
    okhttp请求完整流程图
    责任链模式
  • 原文地址:https://www.cnblogs.com/wizarderror/p/11251610.html
Copyright © 2011-2022 走看看