type MinStack struct {
A []int
min int
}
/** initialize your data structure here. */
func Constructor() MinStack {
return MinStack{}
}
func (this *MinStack) Push(x int) {
if len(this.A) == 0 {
this.min = x
}
this.A = append(this.A, x-this.min)
if this.min > x {
this.min = x
}
}
func (this *MinStack) Pop() {
if len(this.A) > 0 {
x := this.A[len(this.A)-1]
if x < 0 {
this.min -= x
}
this.A = this.A[:len(this.A)-1]
}
}
func (this *MinStack) Top() int {
if len(this.A) > 0 {
x := this.A[len(this.A)-1]
if x < 0 {
return this.min
}
return x + this.min
}
return 0
}
func (this *MinStack) GetMin() int {
return this.min
}
/**
* Your MinStack object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(x);
* obj.Pop();
* param_3 := obj.Top();
* param_4 := obj.GetMin();
*/