leetcode 链接:155. 最小栈

题目

设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top()—— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

示例:

  1. 输入:
  2. ["MinStack","push","push","push","getMin","pop","top","getMin"]
  3. [[],[-2],[0],[-3],[],[],[],[]]
  4. 输出:
  5. [null,null,null,null,-3,null,0,-2]
  6. 解释:
  7. MinStack minStack = new MinStack();
  8. minStack.push(-2);
  9. minStack.push(0);
  10. minStack.push(-3);
  11. minStack.getMin(); --> 返回 -3.
  12. minStack.pop();
  13. minStack.top(); --> 返回 0.
  14. minStack.getMin(); --> 返回 -2.

解答 & 代码

class MinStack {
private:
    stack<int> valS;    // 存储数值的栈
    stack<int> minS;    // 存储最小值的栈
public:
    /** initialize your data structure here. */
    MinStack() {
    }

    void push(int val) {
        valS.push(val);
        if(minS.empty() || minS.top() > val)
            minS.push(val);
        else
            minS.push(minS.top());
    }

    void pop() {
        if(valS.empty())
            return;
        valS.pop();
        minS.pop();
    }

    int top() {
        if(valS.empty())
            return -1;
        return valS.top();
    }

    int getMin() {
        if(minS.empty())
            return -1;
        return minS.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

执行结果:

执行结果:通过

执行用时:20 ms, 在所有 C++ 提交中击败了 92.95% 的用户
内存消耗:16 MB, 在所有 C++ 提交中击败了 19.42% 的用户