[LintCode] Min Stack 最小栈

Posted Grandyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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;
};

 

以上是关于[LintCode] Min Stack 最小栈的主要内容,如果未能解决你的问题,请参考以下文章

Lintcode12 Min Stack solution 题解

12 带最小值操作的栈

lintcode 12 带最小值操作的栈

LeetCode 155 Min Stack(最小栈)

Min Stack

leetcode 155. Min Stack最小栈(中等)