62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
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())
|
|
}
|