• 浅谈单调栈


    浅谈单调栈

    本篇随笔简单谈一下算法竞赛中的一种数据结构——单调栈。

    提前说一声,本篇随笔是一个需要前置知识的随笔。在学习单调栈之前,首先需要读者知道什么是栈。

    这需要最基础的数据结构知识。

    然后要有不低于初二的数学素养,知道单调这个词的含义。

    也就是说正常人都差不多会。


    一、单调栈的概念

    单调栈。

    就是前置知识加和。

    单调+栈。

    也就是说,对于这个单调栈来讲,栈中的元素是满足单调性的。

    那么当然有单调递增栈和单调递减栈等等的分类。

    这就是单调栈了。


    二、单调栈的应用

    单调栈的概念非常简单,那么它的精髓就在于应用,也就是在栈上加了个单调性,它能够支持解决的问题有什么变化。

    单调栈的应用是,维护序列中一个数左/右第一个大于/小于它的数。

    你可能会说,都是(O(N))复杂度,为什么用单调栈?直接扫描就可以啦?

    但是单调栈是用(O(N))的时间,扫描完一整个序列并且处理出所有数左/右第一个大于/小于它的数。

    直接扫描的话,复杂度明显是(O(N^2))的。

    为什么单调栈可以做到这一点呢?

    假设我们要维护一个序列中所有数右侧第一个大于它的数在哪。

    那么我们维护单调递减栈,显然,如果新入栈的元素不符合单调栈的性质,就弹栈直到它符合单调栈性质为止。在这个弹栈的过程中,显然地,那些被弹出来的东西都比它小(废话),而且还在它前面,也就是说,如果一个元素可以让这个单调栈出现弹栈操作,那么对于弹出来的所有东西来讲,这个元素就是它们的答案。

    这就是单调栈的妙用啦!

    其应用还是比较局限的。

  • 相关阅读:
    SSM框架整合步骤
    Spring-data-jpa
    allure定制报告
    pytest常用选项
    staticmethod&classmethod&property
    __slot__
    python的参数传递
    闭包和装饰器
    内置高阶函数
    str
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13926517.html
Copyright © 2020-2023  润新知