package q155 type stackElem struct { val, min int } type MinStack struct { stack []stackElem } func Constructor() MinStack { return MinStack{} } func (s *MinStack) Push(val int) { minVal := val if len(s.stack) > 0 { minVal = min(minVal, s.GetMin()) } s.stack = append(s.stack, stackElem{ val: val, min: minVal, }) } func (s *MinStack) Pop() { s.stack = s.stack[:len(s.stack)-1] } func (s *MinStack) Top() int { return s.stack[len(s.stack)-1].val } func (s *MinStack) GetMin() int { return s.stack[len(s.stack)-1].min } /** * Your MinStack object will be instantiated and called as such: * obj := Constructor(); * obj.Push(val); * obj.Pop(); * param_3 := obj.Top(); * param_4 := obj.GetMin(); */