package Stack
import "math"
type MinStack struct {
size int
data []int
min []int
}
func Constructor() MinStack {
minStack := MinStack{
size: 0,
data: make([]int, 0),
min: make([]int, 0),
}
return minStack
}
func (this *MinStack) Push(val int) {
var curMin int
if this.size == 0 {
curMin = math.MaxInt
} else {
curMin = this.min[this.size-1]
}
newMin := min(val, curMin)
this.data = append(this.data, val)
this.min = append(this.min, newMin)
this.size++
}
func (this *MinStack) Pop() {
this.data = this.data[:this.size-1]
this.min = this.min[:this.size-1]
this.size--
}
func (this *MinStack) Top() int {
return this.data[this.size-1]
}
func (this *MinStack) GetMin() int {
return this.min[this.size-1]
}