• [LintCode] Min Stack 最小栈


    Implement a stack with min() function, which will return the smallest number in the stack.

    It should support push, pop and min operation all in O(1) cost.

     Notice

    min operation will never be called if there is no number in the stack.

    Example
    push(1)
    pop()   // return 1
    push(2)
    push(3)
    min()   // return 2
    push(1)
    min()   // return 1

    LeetCode上的原题,请参见我之前的博客Min Stack.

    解法一:

    class MinStack {
    public:
        MinStack() {}
    
        void push(int number) {
            m1.push(number);
            if (m2.empty() || m2.top() >= number) {
                m2.push(number);
            }
        }
    
        int pop() {
            if (m1.empty()) return -1;
            int t = m1.top(); m1.pop();
            if (!m2.empty() && m2.top() == t) m2.pop();
            return t;
        }
    
        int min() {
            if (!m2.empty()) return m2.top();
            return -1;
        }
    private:
        stack<int> m1, m2;
    };

    解法二:

    class MinStack {
    public:
        MinStack():mn(INT_MAX) {}
    
        void push(int number) {
            if (number <= mn) {
                s.push(mn);
                mn = number;
            }
            s.push(number);
        }
    
        int pop() {
            int t = s.top(); s.pop();
            if (t == mn) {
                mn = s.top(); s.pop();
            }
            return t;
        }
    
        int min() {
            return mn;
        }
    
    private:
        int mn;
        stack<int> s;
    };
  • 相关阅读:
    Redis 主从复制
    Redis 持久化
    Redis 的消息订阅/发布
    Redis 排序功能 -- SORT
    Redis 过期时间与缓存应用
    Redis 事务
    Redis 5种数据类型的常用命令
    Java 框架的核心 -- 反射
    类的加载和初始化 ---- new 一个对象时,在JVM 中的过程是什么
    了解spring
  • 原文地址:https://www.cnblogs.com/grandyang/p/6060577.html
Copyright © 2020-2023  润新知