# 155. Min Stack

--

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

Implement the `MinStack` class:

• `MinStack()` initializes the stack object.
• `void push(val)` pushes the element `val` onto the stack.
• `void pop()` removes the element on the top of the stack.
• `int top()` gets the top element of the stack.
• `int getMin()` retrieves the minimum element in the stack.

Example 1:

`Input["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]Output[null,null,null,null,-3,null,0,-2]ExplanationMinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); // return -3minStack.pop();minStack.top();    // return 0minStack.getMin(); // return -2`
`class MinStack {public:    /** initialize your data structure here. */    int t;    vector<int> v;        MinStack() {        v.clear();        t = -1;    }        void push(int val) {        v.push_back(val);        t++;    }        void pop() {       v.pop_back();       t--;       }        int top() {        return v[t];    }        int getMin() {        return *min_element(v.begin(), v.end());    }};/** * 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(); */`

Runtime: 100 ms, faster than 8.70% of C++ online submissions for Min Stack.

Memory Usage: 16.2 MB, less than 99.04% of C++ online submissions for Min Stack.