zoukankan      html  css  js  c++  java
  • [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;
    };
  • 相关阅读:
    签字文件的保存逻辑
    POJ-1273 Drainage Ditches
    POJ-2513 Colored Sticks
    HDU-1251 统计难题
    POJ-1300 Door Man
    POJ-3159 Candies
    POJ-3169 Layout
    POJ-2983 Is the Information Reliable?
    POJ-1716 Integer Intervals
    HDU-3666 THE MATRIX PROBLEM
  • 原文地址:https://www.cnblogs.com/grandyang/p/6060577.html
Copyright © 2011-2022 走看看