luoheng
10/26/2019 - 4:47 AM

MinStack


type MinStack struct {
    A []int
    min int
}


/** initialize your data structure here. */
func Constructor() MinStack {
    return MinStack{}
}


func (this *MinStack) Push(x int)  {
    if len(this.A) == 0 {
        this.min = x
    }
    this.A = append(this.A, x-this.min)
    if this.min > x {
        this.min = x
    }
}


func (this *MinStack) Pop()  {
    if len(this.A) > 0 {
        x := this.A[len(this.A)-1]
        if x < 0 {
            this.min -= x 
        }
        this.A = this.A[:len(this.A)-1]
    }
}


func (this *MinStack) Top() int {
    if len(this.A) > 0 {
        x := this.A[len(this.A)-1]
        if x < 0 {
            return this.min
        }
        return x + this.min
    }
    return 0
}


func (this *MinStack) GetMin() int {
    return this.min
}


/**
 * Your MinStack object will be instantiated and called as such:
 * obj := Constructor();
 * obj.Push(x);
 * obj.Pop();
 * param_3 := obj.Top();
 * param_4 := obj.GetMin();
 */