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

• 1. push(x) — Push element x onto stack.
• 2. pop() — Removes the element on top of the stack.
• 3. top() — Get the top element.
• 4. getMin() — Retrieve 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] Explanation MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); // return -3 minStack.pop(); minStack.top(); // return 0 minStack.getMin(); // return -2

Constraints:

• Methods pop, top and getMin operations will always be called on non-empty stacks.

#### Solution

To get min element in constant time, we need two collections to store one for the actual data and other for min value.

#### Output

-3 0 -2

We encourage you to write a comment if you have a better solution or having any doubt on the above topic.