| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | package main// MinStackOld ...type MinStackOld struct {	val []int	min []int	top int}// ConstructorOld /** initialize your data structure here. */func ConstructorOld() MinStackOld {	s := MinStackOld{make([]int, 0), make([]int, 0), -1}	return s}// Push ...func (stack *MinStackOld) Push(x int) {	stack.val = append(stack.val, x)	stack.top++	idx := 0	for ; idx < stack.top; idx++ {		if x > stack.val[idx] {			break		}	}	stack.min = append(stack.min, 0)	copy(stack.min[idx+1:stack.top+1], stack.min[idx:stack.top])	stack.min[idx] = x}// Pop ...func (stack *MinStackOld) Pop() {	if stack.top != -1 {		idx := 0		for ; idx < stack.top+1; idx++ {			if stack.min[idx] == stack.val[stack.top] {				break			}		}		stack.min = append(stack.min[:idx], stack.min[idx+1:]...)		stack.val = stack.val[:stack.top]		stack.top--	}}// Top ...func (stack *MinStackOld) Top() int {	return stack.val[stack.top]}// GetMin ...func (stack *MinStackOld) GetMin() int {	return stack.min[stack.top]}/** * Your MinStack object will be instantiated and called as such: * obj := Constructor(); * obj.Push(x); * obj.Pop(); * param_3 := obj.Top(); * param_4 := obj.GetMin(); */// MinStack ...type MinStack struct {	val []int	min []int}// Constructor /** initialize your data structure here. */func Constructor() MinStack {	return MinStack{}}// Push important! min []int stores the "current miximum"func (stack *MinStack) Push(x int) {	stack.val = append(stack.val, x)	if len(stack.min) == 0 {		stack.min = append(stack.min, x)		return	}	m := stack.min[len(stack.min)-1]	if x < m {		stack.min = append(stack.min, x)		return	}	stack.min = append(stack.min, m)}// Pop ...func (stack *MinStack) Pop() {	n := len(stack.val) - 1	stack.val = stack.val[:n]	stack.min = stack.min[:n]}// Top ...func (stack *MinStack) Top() int {	return stack.val[len(stack.val)-1]}// GetMin ...func (stack *MinStack) GetMin() int {	return stack.min[len(stack.min)-1]}// func main() {// 	stack := Constructor()// 	stack.Push(1)// 	fmt.Println(stack.Top())// 	fmt.Println(stack.GetMin())// }
 |