包含min函数的栈

132 阅读1分钟

image.png

代码:

  1. 建一个辅助栈min
  2. stk入栈的时候,将入栈元素与min的栈顶元素做比较,min的栈顶元素即当前所有元素中的最小元素,如果入栈元素更小,则此元素入栈min,否则入栈min的栈顶元素,
  3. 弹栈时,将min的栈顶也弹栈,
  4. 因为要和栈顶元素比较,所以初始化min时,添加一个初始元素math.MaxInt64
type MinStack struct {
    stk []int 
    min []int
}


/** initialize your data structure here. */
func Constructor() MinStack {
    return MinStack{min : []int{math.MaxInt64}}
}


func (this *MinStack) Push(x int)  {
    this.stk = append(this.stk, x)
    top := this.min[len(this.min)-1]
    this.min = append(this.min, min(x, top))
}


func (this *MinStack) Pop()  {
    this.stk = this.stk[:len(this.stk)-1]
    this.min = this.min[:len(this.min)-1]
}


func (this *MinStack) Top() int {
    return this.stk[len(this.stk)-1]
}


func (this *MinStack) Min() int {
    return this.min[len(this.min)-1]
}

func min(a,b int)int {
    if a < b {
        return a 
    }
    return  b 
}

/**
 * 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();
 */