[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;
};

本文转自博客园Grandyang的博客,原文链接:最小栈[LintCode] Min Stack ,如需转载请自行联系原博主。

相关文章
|
5月前
剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈
33 0
|
5月前
|
存储 算法
《剑指offer》之“包含min函数的栈”题解
《剑指offer》之“包含min函数的栈”题解
18 0
|
5月前
剑指 Offer 30:包含min函数的栈
剑指 Offer 30:包含min函数的栈
42 0
剑指 Offer 30. 包含min函数的栈C++(详解)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -2. 方法 设置俩个栈,一个数据栈存放数据元素
104 0
剑指 Offer 30. 包含min函数的栈C++(详解)
最小栈 Min_Stack
最小栈 Min_Stack
98 0
最小栈 Min_Stack
|
Java C++
LeetCode(剑指 Offer)- 30. 包含min函数的栈
LeetCode(剑指 Offer)- 30. 包含min函数的栈
97 0
LeetCode 155:最小栈 Min Stack
LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。
799 0