zoukankan      html  css  js  c++  java
  • 12 带最小值操作的栈

    原题网址:https://www.lintcode.com/zh-cn/problem/min-stack/#

    实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。

    你实现的栈将支持pushpop 和 min 操作,所有操作要求都在O(1)时间内完成。

     注意事项

    如果堆栈中没有数字则不能进行min方法的调用

    样例

    如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1

    标签 
     
    思路:可以创建两个数组,一个保存栈数据,另一个保存当前栈的最小值。栈数据数组不用说,入栈出栈直接操作即可。
    最小值数组,新元素入栈时判断当前最小值(栈顶)与新元素哪个小,较小者压入最小值数组。元素出栈时,最小值数组删掉最后一个元素即可,两个数组始终等长。
    min函数可以直接返回最小值数组最后一个元素,该值为当前栈最小值。
     
    AC代码:
    class MinStack {
    public:
        MinStack() {
            // do intialization if necessary
        }
    
        /*
         * @param number: An integer
         * @return: nothing
         */
        void push(int number) {
            // write your code here
            m_iAarray.push_back(number);
            if (minVal.empty()||number<minVal.back())
            {
                minVal.push_back(number);
            }
            else
            {
                minVal.push_back(minVal.back());
            }
        }
    
        /*
         * @return: An integer
         */
        int pop() {
            // write your code here
            int temp;
            if (!m_iAarray.empty())
            {
                temp=m_iAarray.back();
                m_iAarray.pop_back();
            }
            if (!minVal.empty())
            {
                minVal.pop_back();
            }        
            return temp;
        }
    
        /*
         * @return: An integer
         */
        int min() {
            // write your code here
            return minVal.back();
        }
        
        vector<int> m_iAarray;
        vector<int> minVal;
    };

    参考:https://www.cnblogs.com/theskulls/p/5098271.html

    另一种思路,用两个栈,一个保存数据,一个保存当前最小值,效率更高。参考:https://blog.csdn.net/ljlstart/article/details/48517703

    这种方法当入栈时,判断新元素是否小于或等于当前最小值(最小值栈栈顶),小于等于则push新值更新最小值栈,否则维持原样。

    删除元素时判断要删除的值是否是当前最小值,如果是,最小值栈删除当前栈顶,更新最小值。

     
  • 相关阅读:
    SimpleDateFormat解析的时区问题
    linux之cp/scp命令+scp命令详解
    java.net.SocketException: java.security.NoSuchAlgorithmException
    Gradle使用手册(一):为什么要用Gradle?
    js_实用
    exp.validate.js
    MySQL实用技巧
    MongoDB 用户配置
    js 图片处理 Jcrop.js API
    MySQL连接池
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/8921887.html
Copyright © 2011-2022 走看看