• 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新值更新最小值栈,否则维持原样。

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

     
  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/8921887.html
Copyright © 2020-2023  润新知