# 最小栈 (Min Stack) ## 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 ## 解题思路 ### 辅助栈 使用两个栈,一个存储所有元素,另一个存储当前最小值。 ## Go 代码 ```go type MinStack struct { stack []int minStack []int } func Constructor() MinStack { return MinStack{ stack: []int{}, minStack: []int{}, } } func (this *MinStack) Push(val int) { this.stack = append(this.stack, val) if len(this.minStack) == 0 { this.minStack = append(this.minStack, val) } else { min := this.minStack[len(this.minStack)-1] if val < min { this.minStack = append(this.minStack, val) } else { this.minStack = append(this.minStack, min) } } } func (this *MinStack) Pop() { this.stack = this.stack[:len(this.stack)-1] this.minStack = this.minStack[:len(this.minStack)-1] } func (this *MinStack) Top() int { return this.stack[len(this.stack)-1] } func (this *MinStack) GetMin() int { return this.minStack[len(this.minStack)-1] } ``` **复杂度:** 所有操作 O(1) 时间