Min Stack — Parallel Min Tracking Stack
Advertisement
Problem 254 · Min Stack
Difficulty: Easy · Pattern: Parallel Min Stack
Solutions
# Python
class MinStack:
def __init__(self): self.stack = []; self.min_stack = []
def push(self, val):
self.stack.append(val)
self.min_stack.append(min(val, self.min_stack[-1] if self.min_stack else val))
def pop(self): self.stack.pop(); self.min_stack.pop()
def top(self): return self.stack[-1]
def getMin(self): return self.min_stack[-1]
// Java
class MinStack {
Deque<Integer> stack = new ArrayDeque<>(), minStack = new ArrayDeque<>();
public void push(int val) {
stack.push(val);
minStack.push(minStack.isEmpty() ? val : Math.min(val, minStack.peek()));
}
public void pop() { stack.pop(); minStack.pop(); }
public int top() { return stack.peek(); }
public int getMin() { return minStack.peek(); }
}
// C++
class MinStack {
stack<int> st, mn;
public:
void push(int val) {
st.push(val);
mn.push(mn.empty() ? val : min(val, mn.top()));
}
void pop() { st.pop(); mn.pop(); }
int top() { return st.top(); }
int getMin() { return mn.top(); }
};
Complexity
- All operations: O(1)
- Space: O(n)
Advertisement