155. Min Stack
LeetCode 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(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.
Example 1:
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 -2Constraints:
-2^31 <= val <= 2^31 - 1Methods
pop,topandgetMinoperations will always be called on non-empty stacks.At most
3 * 10^4calls will be made topush,pop,top, andgetMin.
Tags
Stack, Design
Solution

Apart from a standard stack data structure (an array implemented stack), we also initialize a minStack to keep track of the minimum value of the stack. Operations related to minStack:
Constructor: minStack is initialized with an element
intMaxto avoid to be empty when we push the first element into the stack;Push: push the smaller element between
xand the top of minStack;Pop: pop the top of minStack;
GetMin: return the top of minStack.
Complexity
Time complexity:
Space complexity:
Code
type MinStack struct {
stack, minStack []int
}
func Constructor() MinStack {
return MinStack{[]int{}, []int{9223372036854775807}}
}
func (this *MinStack) Push(x int) {
this.stack = append(this.stack, x)
this.minStack = append(this.minStack, min(x, this.minStack[len(this.minStack)-1]))
}
func (this *MinStack) Pop() {
this.stack = this.stack[:len(this.stack)-1]
this.minStack = this.minStack[:len(this.minStack)-1]
}
func (this *MinStack) Top() int {
return this.stack[len(this.stack)-1]
}
func (this *MinStack) GetMin() int {
return this.minStack[len(this.minStack)-1]
}
func min(a, b int) int {
if a < b {
return a
}
return b
}Reference
Last updated
Was this helpful?