题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
解题思路
- 使用两个栈来实现
- 一个栈正常保存数值,入栈出栈
- 另一个栈保存当前栈内最小值,
- 入栈时将当前最小值和入栈元素比较,小者入栈
- 出栈时两个栈同时出栈
代码实现
type MinStack struct {
stack []int
minStack []int
}
/** initialize your data structure here. */
func Constructor() MinStack {
return MinStack{}
}
func (this *MinStack) Push(x int) {
this.stack = append(this.stack, x)
if len(this.minStack) > 0 {
minNum := this.minStack[len(this.minStack)-1]
if minNum < x {
this.minStack = append(this.minStack, minNum)
return
}
}
this.minStack = append(this.minStack, x)
}
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) Min() int {
return this.minStack[len(this.minStack)-1]
}
/**
* Your MinStack object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(x);
* obj.Pop();
* param_3 := obj.Top();
* param_4 := obj.Min();
*/