使用2个栈实现,data 是数据栈,正常操作 min 是最小值存储栈,入栈时判断 x 是否小于 min 栈顶,如果是则 min 一同入栈 出栈时判断出栈值和 min 栈顶是否一致,是则 min 一同出栈
package stack
// 最小栈 leetcode 155
type MinStack struct {
data []int
min []int
}
/** initialize your data structure here. */
func Constructor() MinStack {
return MinStack{}
}
func (this *MinStack) Push(x int) {
this.data = append(this.data, x)
if len(this.min) == 0 || x <= this.GetMin() {
this.min = append(this.min, x)
}
}
func (this *MinStack) Pop() {
if this.Top() == this.GetMin() {
this.min = this.min[:len(this.min)-1]
}
this.data = this.data[:len(this.data)-1 ]
}
func (this *MinStack) Top() int {
return this.data[len(this.data)-1]
}
func (this *MinStack) GetMin() int {
return this.min[len(this.min)-1]
}