Implement a stack data structure that supports the following operations in constant time: push(element), pop(), top(), and get_min(). The stack should allow retrieving the minimum element currently in the stack in O(1) time. Implement the class MinStack with methods: __init__(), push(value), pop(), top(), and get_min().
Example 1
Input: ["MinStack","push","push","push","get_min","pop","top","get_min"] [[],[5],[1],[7],[],[],[],[]]
Output: [None,None,None,None,1,None,1,1]
Explanation: MinStack stack = MinStack(); stack.push(5); stack.push(1); stack.push(7); stack.get_min() returns 1; stack.pop(); stack.top() returns 1; stack.get_min() returns 1;
Example 2
Input: ["MinStack","push","push","pop","get_min","top"] [[],[10],[3],[],[],[]]
Output: [None,None,None,None,10,10]
Explanation: MinStack stack = MinStack(); stack.push(10); stack.push(3); stack.pop(); stack.get_min() returns 10; stack.top() returns 10;
Constraints
Case 1
Input: ["MinStack","push","push","push","get_min","pop","top","get_min"] [[],[8],[4],[6],[],[],[],[]]
Expected: [None,None,None,None,4,None,4,4]
Case 2
Input: ["MinStack","push","push","pop","get_min","top"] [[],[-1],[2],[],[],[]]
Expected: [None,None,None,None,-1,-1]
Case 3
Input: ["MinStack","push","push","push","pop","get_min","top"] [[],[100],[50],[200],[],[],[]]
Expected: [None,None,None,None,None,50,50]