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

    class MinStack {
    public:
        stack<int> num;
        stack<int> mins;
        MinStack() {
            // do intialization if necessary
        }
    
        /*
         * @param number: An integer
         * @return: nothing
         */
        void push(int number) {
            // write your code here
            if( mins.size()==0 || mins.top() >= number) {
                mins.push(number);
            } else {
                mins.push(mins.top());
            }
            num.push(number);
        }
    
        /*
         * @return: An integer
         */
        int pop() {
            // write your code here
            int t;
            if(mins.size()>0 && num.size()>0){
                t=num.top();
                num.pop();
                mins.pop();
                return t;
            } else {
                return 0;
            }
        }
    
        /*
         * @return: An integer
         */
        int min() {
            // write your code here
            if(mins.size() > 0 && num.size()>0){
                return mins.top();
            }
            return 0;
        }
    };

    这个题目的思想是,肯定要有一个结构来保存最小值。

    起初我想的是可以只用一个数就能保存最小值吗,显然不太可能,因为我们只能访问栈顶获得数据。

    那么就用第二个栈来保存这个最小 数据,又是不是不用保存多个数据,在每次弹出压入的时候就把数据整理好?也不太可能,因为在数据出栈的时候,那相应min堆栈里的也要出去,并不能保证它就在栈顶,所以这也不可能。

    所以只能是保存每一次对数据栈进行操作时候的最小值。

    另外,还有一个细节,这里C++的pop()是没有返回值的,只能用top()去获取值。

  • 相关阅读:
    java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
    Lambda表达式详解
    MAC JDK 卸载方法(彻底卸载)
    JAVA final关键字
    JAVA访问权限
    JAVA重写
    JAVA继承
    单例设计模式---懒汉式和饿汉式
    JAVA构造块和静态代码块
    Java static关键字
  • 原文地址:https://www.cnblogs.com/rimochiko/p/8305842.html
Copyright © 2011-2022 走看看