实现返回栈中的最小元素 要求 时间 O(1)

    1. package main
    2. import "fmt"
    3. type Stack struct {
    4. stack []item
    5. }
    6. type item struct {
    7. min, x int
    8. }
    9. func NewStack() Stack {
    10. return Stack{}
    11. }
    12. func(m *Stack) Push(x int) {
    13. min := x
    14. if len(m.stack) > 0 && m.GetMin() < x {
    15. min = m.GetMin()
    16. }
    17. m.stack = append(m.stack, item{min: min, x: x})
    18. return
    19. }
    20. func (m *Stack) Pop() {
    21. length := len(m.stack)
    22. m.stack = m.stack[:length - 1]
    23. return
    24. }
    25. func (m *Stack) Top() int {
    26. length := len(m.stack)
    27. return m.stack[length - 1].x
    28. }
    29. func (m *Stack) GetMin() int {
    30. length := len(m.stack)
    31. return m.stack[length - 1].min
    32. }
    33. func main() {
    34. minStack := new(Stack)
    35. minStack.Push(-2)
    36. minStack.Push(0)
    37. minStack.Push(3)
    38. minStack.Push(-5)
    39. fmt.Println(minStack.GetMin())
    40. minStack.Pop()
    41. fmt.Println(minStack.Top())
    42. fmt.Println(minStack.GetMin())
    43. }