majianyu
2/18/2019 - 11:13 AM

155 最小栈

使用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]
}