Hi Geeks. Welcome to 100 Days of Leetcode challenge.

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

push(x) — Push element x onto stack.

pop() — Removes the element on top of the stack.

top() — Get the top element.

getMin() — Retrieve the minimum element in the stack.

Example:

MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.

Solution

I really loved this approach. It really improved something in me. See the solution, you will understand, how easily we can achieve this.

public class MinStack { /** initialize your data structure here. */ Stack<int[]> stack; public MinStack() { stack = new Stack<int[]>(); } public void Push(int x) { if(stack.Count == 0) { stack.Push(new int[]{x,x}); } else{ int currentMin = stack.Peek()[1]; stack.Push(new int[]{x,Math.Min(x,currentMin)}); } } public void Pop() { stack.Pop(); } public int Top() { return stack.Peek()[0]; } public int GetMin() { return stack.Peek()[1]; } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.Push(x); * obj.Pop(); * int param_3 = obj.Top(); * int param_4 = obj.GetMin(); */

All the operations takes O(1) time – Constant time.