
代码:
- 建一个辅助栈min
- stk入栈的时候,将入栈元素与min的栈顶元素做比较,min的栈顶元素即当前所有元素中的最小元素,如果入栈元素更小,则此元素入栈min,否则入栈min的栈顶元素,
- 弹栈时,将min的栈顶也弹栈,
- 因为要和栈顶元素比较,所以初始化min时,添加一个初始元素math.MaxInt64
type MinStack struct {
stk []int
min []int
}
func Constructor() MinStack {
return MinStack{min : []int{math.MaxInt64}}
}
func (this *MinStack) Push(x int) {
this.stk = append(this.stk, x)
top := this.min[len(this.min)-1]
this.min = append(this.min, min(x, top))
}
func (this *MinStack) Pop() {
this.stk = this.stk[:len(this.stk)-1]
this.min = this.min[:len(this.min)-1]
}
func (this *MinStack) Top() int {
return this.stk[len(this.stk)-1]
}
func (this *MinStack) Min() int {
return this.min[len(this.min)-1]
}
func min(a,b int)int {
if a < b {
return a
}
return b
}