155. Min Stack
Description
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.
Constraints
Methods
pop
,top
andgetMin
operations will always be called on non-empty stacks.
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
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
Solutions
/**
* Time complexity :
* Space complexity :
*/
class MinStack {
private LinkedList<Integer> list;
private int min = Integer.MAX_VALUE;
/** initialize your data structure here. */
public MinStack() {
list = new LinkedList();
}
public void push(int x) {
if(x < min) min = x;
list.add(x);
}
public void pop() {
if(list.isEmpty()) return;
if(list.removeLast() == min) {
min = Integer.MAX_VALUE;
for(int n: list) {
if(n < min) min = n;
}
}
}
public int top() {
if(list.isEmpty()) return -1;
return list.peekLast();
}
public int getMin() {
return min;
}
}
/**
* 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();
*/
Follow up
Last updated
Was this helpful?