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())
- // }
|