0155.最小栈

设计一个支持 push,pop, top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) -- 将元素 x 推入栈中
  • pop() -- 删除栈顶的元素
  • top() -- 获取栈顶元素
  • getMin() -- 检索栈中最小元素
  type MinStack struct {
      stack []int
      minStack []int
  }


  /** initialize your data structure here. */
func Constructor() MinStack {
      return MinStack{
          stack: make([]int, 0),
          minStack: make([]int, 0),
      }
}
  
  
func (this *MinStack) Push(x int) {
      this.stack = append(this.stack, x)
      // 注意边界条件 <= 和 minStack 为空时
      if len(this.minStack) == 0 || x <= this.minStack[len(this.minStack)-1] {
          this.minStack = append(this.minStack, x)
      }
}
  
  
func (this *MinStack) Pop() {
      if len(this.stack) == 0 {
          return
      }
      if x := this.stack[len(this.stack)-1]; x == this.minStack[len(this.minStack)-1] {
          this.minStack = this.minStack[:len(this.minStack)-1]
      }
      this.stack = this.stack[:len(this.stack)-1]
}
  
  
func (this *MinStack) Top() int {
      if len(this.stack) == 0 {
          return 0
      }
      return this.stack[len(this.stack)-1]
}


func (this *MinStack) GetMin() int {
      if len(this.minStack) == 0 {
          return 0
      }
      return this.minStack[len(this.minStack)-1]
}