Skip to content

Latest commit

 

History

History
49 lines (38 loc) · 947 Bytes

30. 包含min函数的栈.md

File metadata and controls

49 lines (38 loc) · 947 Bytes

解题思路

1. 单调栈

维护两个栈:

  • s 正常栈,以切片尾部作为栈顶数据进出
  • min 单调递减栈,以切片尾部作为栈顶数据进出,栈顶元素是当前最小值,入栈新数据 x,取 x 和当前栈顶元素二者中更小的值实际入栈
type MinStack struct {
    s   []int
    min []int
}

func Constructor() MinStack {
    return MinStack{}
}

func (t *MinStack) Push(x int)  {
    t.s = append(t.s, x)
    if len(t.min) == 0 {
        t.min = append(t.min, x)
    } else {
        min := x
        if t.min[len(t.min)-1] < x {
            min = t.min[len(t.min)-1]
        }
        t.min = append(t.min, min)
    }
}

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

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

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