155. Min Stack¶
Description¶
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(int val)pushes the elementvalonto 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.
You must implement a solution with O(1) time complexity for each function.
Example 1
Input:
Output: [null,null,null,null,-3,null,0,-2]
Explanation:
Constraints
-231 <= val <= 231 - 1- Methods
pop,topandgetMinoperations will always be called on non-empty stacks. At most 3 * 104 calls will be made topush,pop,top, andgetMin.
Solution: Singly Linked List¶
Each node stores its value and the current minimum at the time it was pushed. The head of the list is always the top of the stack.
push(val)— Create a new node withvalue = min(val, current min)and prepend it to the list.pop()— Move the head pointer tohead.next.top()— Returnhead.key.getMin()— Returnhead.value(the tracked minimum).
Since the minimum is baked into every node at push time, removing the top always reveals the correct minimum for the remaining stack — no auxiliary structure needed.
- Time Complexity:
O(1)for all operations - Space Complexity:
O(n)wherenis the number of elements in the stack — each push allocates one node