155.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package main
  2. type MinStackOld struct {
  3. val []int
  4. min []int
  5. top int
  6. }
  7. /** initialize your data structure here. */
  8. func ConstructorOld() MinStackOld {
  9. s := MinStackOld{make([]int, 0), make([]int, 0), -1}
  10. return s
  11. }
  12. func (this *MinStackOld) Push(x int) {
  13. this.val = append(this.val, x)
  14. this.top++
  15. idx := 0
  16. for ; idx < this.top; idx++ {
  17. if x > this.val[idx] {
  18. break
  19. }
  20. }
  21. this.min = append(this.min, 0)
  22. copy(this.min[idx+1:this.top+1], this.min[idx:this.top])
  23. this.min[idx] = x
  24. }
  25. func (this *MinStackOld) Pop() {
  26. if this.top != -1 {
  27. idx := 0
  28. for ; idx < this.top+1; idx++ {
  29. if this.min[idx] == this.val[this.top] {
  30. break
  31. }
  32. }
  33. this.min = append(this.min[:idx], this.min[idx+1:]...)
  34. this.val = this.val[:this.top]
  35. this.top--
  36. }
  37. }
  38. func (this *MinStackOld) Top() int {
  39. return this.val[this.top]
  40. }
  41. func (this *MinStackOld) GetMin() int {
  42. return this.min[this.top]
  43. }
  44. /**
  45. * Your MinStack object will be instantiated and called as such:
  46. * obj := Constructor();
  47. * obj.Push(x);
  48. * obj.Pop();
  49. * param_3 := obj.Top();
  50. * param_4 := obj.GetMin();
  51. */
  52. type MinStack struct {
  53. val []int
  54. min []int
  55. }
  56. /** initialize your data structure here. */
  57. func Constructor() MinStack {
  58. return MinStack{}
  59. }
  60. // important! min []int stores the "current miximum"
  61. func (this *MinStack) Push(x int) {
  62. this.val = append(this.val, x)
  63. if len(this.min) == 0 {
  64. this.min = append(this.min, x)
  65. return
  66. }
  67. m := this.min[len(this.min)-1]
  68. if x < m {
  69. this.min = append(this.min, x)
  70. return
  71. }
  72. this.min = append(this.min, m)
  73. }
  74. func (this *MinStack) Pop() {
  75. n := len(this.val) - 1
  76. this.val = this.val[:n]
  77. this.min = this.min[:n]
  78. }
  79. func (this *MinStack) Top() int {
  80. return this.val[len(this.val)-1]
  81. }
  82. func (this *MinStack) GetMin() int {
  83. return this.min[len(this.min)-1]
  84. }
  85. // func main() {
  86. // stack := Constructor()
  87. // stack.Push(1)
  88. // fmt.Println(stack.Top())
  89. // fmt.Println(stack.GetMin())
  90. // }