• 单调栈


    什么是单调栈

    一个从栈顶到栈底元素大小有序的栈

    单调栈的优势

    效率高:每个元素只进栈一次,出栈一次,所以时间复杂度是(O(N)).

    什么时候用单调栈(单调栈的特点)

    单调递增(减)栈举例,对于数组中的某个元素,单调栈能在平均(O(1))的时间找到离自己最近的比自己小(大)的两个元素(左边一个,右边一个),我通常在数组开头和结尾放一个INT_MIN(INT_MAX),这样就不用处理边界情况。

    (递增为例)如何找到离自己最近的比自己的两个元素?

    对于数组元素b,如果栈顶元素t小于b,那么t就是离b最近的左边的小元素,否则弹栈,直到找到小于b的元素,b入栈。这就是说:b入栈时可以得到b左边最近的小元素。

    继续对数组遍历,如果遍历到的元素大于b就压栈,直到某元素c小于b,b出栈。这就是说:b出栈时可以得到b右边最近的小元素。

    典型题目 leetcode 84

    对于某个柱子b,如果我想知道以a的高度为高的最大矩形怎么办?根据上面我们说的,如果用单调递增栈,我们可以快速得到离b最近的且比b的两个柱子(左边为a,右边为c)。得到之后呢?因为a是b左边第一个比b低的柱子,言外之意是,a,b之间的柱子都比b要,既然都比b高,那么就可以作为以b的高度为高的矩形的一部分,右边同理。那么最后,a和c之间的距离就是以b的高度为高的矩形的底边长度。

  • 相关阅读:
    页面跳转方式
    银行账号每4位插入一个空格
    .net 对称加密
    .net 非对称加密
    webpack-dev-server的cli使用
    你不能不知道的 6 个 Web 开发者工具
    String字符串提取指定内容
    SQLServer 复制表结构
    关于OMAPL138烧写程序的说明
    C程序结构
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/12732060.html
Copyright © 2020-2023  润新知