package top100liked import ( "fmt" "testing" ) // https://leetcode.cn/problems/min-stack/description/?envType=study-plan-v2&envId=top-100-liked type MinStack struct { slice []int minSlice []int // 记录每个层级的最小值 } func Constructor() MinStack { return MinStack{} } func (this *MinStack) Push(value int) { if len(this.slice) == 0 { this.minSlice = append(this.minSlice, value) } else { this.minSlice = append(this.minSlice, min(this.minSlice[len(this.minSlice)-1], value)) } this.slice = append(this.slice, value) } func (this *MinStack) Pop() { this.slice = this.slice[:len(this.slice)-1] this.minSlice = this.minSlice[:len(this.minSlice)-1] } func (this *MinStack) Top() int { return this.slice[len(this.slice)-1] } func (this *MinStack) GetMin() int { return this.minSlice[len(this.minSlice)-1] } func Test1(t *testing.T) { minStack := Constructor() minStack.Push(-2) minStack.Push(0) minStack.Push(-3) fmt.Println(minStack.GetMin()) minStack.Pop() fmt.Println(minStack.Top()) fmt.Println(minStack.GetMin()) } func Test2(t *testing.T) { minStack := Constructor() minStack.Push(1) minStack.Push(2) fmt.Println(minStack.Top()) fmt.Println(minStack.GetMin()) minStack.Pop() fmt.Println(minStack.GetMin()) fmt.Println(minStack.Top()) }