美文网首页
带有最小值的栈

带有最小值的栈

作者: 熊白白 | 来源:发表于2017-07-08 19:43 被阅读14次

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.要求时间复杂度是O(1)
定义两个栈,一个用来存储元素。另一个用来存储最小值。
minS[i]表示valueS从i到底的区间中最小值。
栈有先入后出的特性,也就是说,压入和弹出,从时间上来说,是镜像的。元素x压入时,栈的情形,和x弹出时栈的情形,是一样的。
所以说元素x压入时,栈的最小值,和x弹出时栈的最小值是一样的。
所以用minS栈来统计每个元素压入时(确切来说是压入后),valueS栈的最小值。
这样伴随着valueS中元素的逐个弹出,minS中元素也逐个弹出,来达到同步。
栈相当于是一个黑箱数组。我们只能看到栈顶,所以用栈做规划的话,需要在栈顶放“最”值。在这里,minS就是放最小值的,每一步骤数据栈内的最小值放入minS的栈顶。然后利用栈的镜像原理,达到快速求最小值的目的。

stack<int> valueS,minS;
    void push(int value) {
        valueS.push(value);
        if(minS.empty())
            minS.push(value);
        else{
            if(value<minS.top())
                minS.push(value);
            else
                minS.push(minS.top());
        }
    }
    void pop() {
        valueS.pop();
        minS.pop();
    }
    int top() {
        return valueS.top();
        
    }
    int min() {
        return minS.top();
    }

相关文章

  • 二.栈 4 带有取最小值min方法的栈

    问题:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 ...

  • 12. 带最小值操作的栈

    12. 带最小值操作的栈 描述 笔记 数据 评测 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最...

  • lintcode 带最小值操作的栈

    实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min...

  • 带有最小值的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.要求时间复杂度是O(1)定义两个栈,一个用来...

  • 栈系列之-获取最小值

    一、栈获取最小值算法概述 获取栈的最小值算法:可以动态的获取一个栈中元素的最小值,动态的意思是,当该栈发生push...

  • 求一个动态栈的最小值

    以{3,4,2,1}为例,求push和pop的时候的最小值 使用一个数据栈存储数据,一个辅助栈存储当前最小值,取栈...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 腾讯笔试--逛街

    主要的知识点是:单调栈,该题牢牢记得:栈中记录当前楼能看到的元素 单调栈是单调递增栈,栈顶是最小值单调栈存的是能看...

  • 【练习】实现一个栈

    实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 使用两个栈...

  • JavaScript 力扣算法记录-持续更新2

    11.栈的最小值 解题 12.化栈为队 解题 13.节点间通路 解题 14.化栈为队 解题 15.栈排序 解题 1...

网友评论

      本文标题:带有最小值的栈

      本文链接:https://www.haomeiwen.com/subject/qozhhxtx.html