44 lines
725 B
Go
44 lines
725 B
Go
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();
|
|
*/
|