0155.最小栈
设计一个支持 push,pop, top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) -- 将元素 x 推入栈中
- pop() -- 删除栈顶的元素
- top() -- 获取栈顶元素
- getMin() -- 检索栈中最小元素
type MinStack struct {
stack []int
minStack []int
}
/** initialize your data structure here. */
func Constructor() MinStack {
return MinStack{
stack: make([]int, 0),
minStack: make([]int, 0),
}
}
func (this *MinStack) Push(x int) {
this.stack = append(this.stack, x)
// 注意边界条件 <= 和 minStack 为空时
if len(this.minStack) == 0 || x <= this.minStack[len(this.minStack)-1] {
this.minStack = append(this.minStack, x)
}
}
func (this *MinStack) Pop() {
if len(this.stack) == 0 {
return
}
if x := this.stack[len(this.stack)-1]; x == this.minStack[len(this.minStack)-1] {
this.minStack = this.minStack[:len(this.minStack)-1]
}
this.stack = this.stack[:len(this.stack)-1]
}
func (this *MinStack) Top() int {
if len(this.stack) == 0 {
return 0
}
return this.stack[len(this.stack)-1]
}
func (this *MinStack) GetMin() int {
if len(this.minStack) == 0 {
return 0
}
return this.minStack[len(this.minStack)-1]
}