type MinStack struct {
data []int
min int
length int
}
func Constructor() MinStack {
return MinStack{
data:make([]int,0),
min:2147483647,
}
}
func (this *MinStack) Push(val int) {
this.data = append(this.data, val)
if val<this.min{
this.min=val
}
}
func (this *MinStack) Pop() {
item:=this.data[len(this.data)-1]
this.data=this.data[:len(this.data)-1]
if item==this.min{
// 2^31-1
min:=2147483647
for i:=0;i<len(this.data);i++{
if this.data[i]<min{
min=this.data[i]
}
}
this.min=min
}
}
func (this *MinStack) Top() int {
return this.data[len(this.data)-1]
}
func (this *MinStack) GetMin() int {
return this.min
}
/**
* Your MinStack object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(val);
* obj.Pop();
* param_3 := obj.Top();
* param_4 := obj.GetMin();
*/