155. Min Stack
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.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.
type MinStack struct {
DataSlice []int
MinSlice []int
}
/** initialize your data structure here. */
func Constructor() MinStack {
stack := MinStack{DataSlice: []int{}, MinSlice: []int{}}
return stack
}
func (this *MinStack) Push(x int) {
this.DataSlice = append(this.DataSlice, x)
lg := len(this.MinSlice)
if lg == 0 || x <= this.MinSlice[lg-1] {
this.MinSlice = append(this.MinSlice, x)
}
}
func (this *MinStack) Pop() {
lgAll := len(this.DataSlice)
lgMin := len(this.MinSlice)
if lgAll > 0 {
if lgMin > 0 && this.DataSlice[lgAll-1] == this.MinSlice[lgMin-1] {
this.MinSlice = this.MinSlice[:lgMin-1]
}
this.DataSlice = this.DataSlice[:lgAll-1]
}
}
func (this *MinStack) Top() int {
lg := len(this.DataSlice)
if lg > 0 {
return this.DataSlice[lg-1]
}
return 0
}
func (this *MinStack) GetMin() int {
lg := len(this.MinSlice)
if lg > 0 {
return this.MinSlice[lg-1]
}
return 0
}