[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 ,如需转载请自行联系原博主。

相关文章
|
8月前
剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈
41 0
|
8月前
剑指 Offer 30:包含min函数的栈
剑指 Offer 30:包含min函数的栈
52 0
|
存储 程序员 C++
剑指Offer - 面试题30:包含min函数的栈
剑指Offer - 面试题30:包含min函数的栈
94 0
剑指offer 29. 包含min函数的栈
剑指offer 29. 包含min函数的栈
51 0
包含min函数的栈(其实就是实现一个最小栈)(简单难度)
包含min函数的栈(其实就是实现一个最小栈)(简单难度)
78 0
包含min函数的栈(其实就是实现一个最小栈)(简单难度)
剑指 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. 方法 设置俩个栈,一个数据栈存放数据元素
121 0
剑指 Offer 30. 包含min函数的栈C++(详解)
最小栈 Min_Stack
最小栈 Min_Stack
109 0
最小栈 Min_Stack
LeetCode 155:最小栈 Min Stack
LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。
809 0
[剑指offer]包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 解题思路 用一个栈stack保存数据,用另外一个栈temp保存依次入栈最小的数 比如,stack中依次入栈5, 3, 4, 10, 2, 12, 1, 8 则temp依次入栈5, 3, 3,3, 2, 2, 1, 1 每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则用最小元素入栈。
1234 0