最小栈 - 两个栈模拟
type MinStack struct {
data []int
min []int
}
func Constructor() MinStack {
return MinStack{
data: []int{},
min: []int{},
}
}
func (this *MinStack) Push(val int) {
this.data = append(this.data, val)
if len(this.min) == 0 || val < this.min[len(this.min) - 1] {
this.min = append(this.min, val)
} else {
this.min = append(this.min, this.min[len(this.min) - 1])
}
}
func (this *MinStack) Pop() {
this.data = this.data[:len(this.data) - 1]
this.min = this.min[:len(this.min) - 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]
}
/**
* Your MinStack object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(val);
* obj.Pop();
* param_3 := obj.Top();
* param_4 := obj.GetMin();
*/
最小栈 - 一个栈放差值
type MinStack struct {
data []int
min int
}
func Constructor() MinStack {
return MinStack{
data: []int{},
min: 0,
}
}
func (this *MinStack) Push(val int) {
n := len(this.data)
if n == 0 {
this.data = append(this.data, 0)
this.min = val
} else {
diff := val - this.min
this.data = append(this.data, diff)
if diff < 0 {
this.min = val
}
}
}
func (this *MinStack) Pop() {
n := len(this.data)
diff := this.data[n - 1]
if diff < 0 {
this.min -= diff
}
this.data = this.data[:n - 1]
}
func (this *MinStack) Top() int {
diff := this.data[len(this.data) - 1]
if diff < 0 {
return this.min
}
return diff + this.min
}
func (this *MinStack) GetMin() int {
return this.min
}
/**
* Your MinStack object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(val);
* obj.Pop();
* param_3 := obj.Top();
* param_4 := obj.GetMin();
*/