https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/
注意:
1. 使用两个栈,利用辅助栈保存小值
2. 辅助栈保存小值,比当前最小值还要小的入栈值,这个栈叫「非严格降序栈」,当x【len(this.min) > 0 && this.min[len(this.min)-1] < x】时不需要入min栈
type MinStack struct {
stack []int
min []int
}
func Constructor() MinStack {
return MinStack{
make([]int, 0),
make([]int, 0),
}
}
func (this *MinStack) Push(x int) {
this.stack = append(this.stack, x)
if l := len(this.min); l == 0 || this.min[l-1] >= x {
this.min = append(this.min, x)
}
}
func (this *MinStack) Pop() {
if l := len(this.stack); l > 0 {
if k := len(this.min); k > 0 && this.min[k-1] == this.stack[l-1] {
this.min = this.min[:k-1]
}
this.stack = this.stack[:l-1]
}
}
func (this *MinStack) Top() int {
if l := len(this.stack); l > 0 {
return this.stack[l-1]
}
return 0
}
func (this *MinStack) Min() int {
if l := len(this.min); l > 0 {
return this.min[l-1]
}
return 0
}