123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package main
- import (
- "fmt"
- )
- type MinStackOld struct {
- val []int
- min []int
- top int
- }
- /** initialize your data structure here. */
- func ConstructorOld() MinStackOld {
- s := MinStackOld{make([]int, 0), make([]int, 0), -1}
- return s
- }
- func (this *MinStackOld) Push(x int) {
- this.val = append(this.val, x)
- this.top++
- idx := 0
- for ; idx < this.top; idx++ {
- if x > this.val[idx] {
- break
- }
- }
- this.min = append(this.min, 0)
- copy(this.min[idx+1:this.top+1], this.min[idx:this.top])
- this.min[idx] = x
- }
- func (this *MinStackOld) Pop() {
- if this.top != -1 {
- idx := 0
- for ; idx < this.top+1; idx++ {
- if this.min[idx] == this.val[this.top] {
- break
- }
- }
- this.min = append(this.min[:idx], this.min[idx+1:]...)
- this.val = this.val[:this.top]
- this.top--
- }
- }
- func (this *MinStackOld) Top() int {
- return this.val[this.top]
- }
- func (this *MinStackOld) GetMin() int {
- return this.min[this.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();
- */
- type MinStack struct {
- val []int
- min []int
- }
- /** initialize your data structure here. */
- func Constructor() MinStack {
- return MinStack{}
- }
- // important! min []int stores the "current miximum"
- func (this *MinStack) Push(x int) {
- this.val = append(this.val, x)
- if len(this.min) == 0 {
- this.min = append(this.min, x)
- return
- }
- m := this.min[len(this.min)-1]
- if x < m {
- this.min = append(this.min, x)
- return
- }
- this.min = append(this.min, m)
- }
- func (this *MinStack) Pop() {
- n := len(this.val) - 1
- this.val = this.val[:n]
- this.min = this.min[:n]
- }
- func (this *MinStack) Top() int {
- return this.val[len(this.val)-1]
- }
- func (this *MinStack) GetMin() int {
- return this.min[len(this.min)-1]
- }
- func main() {
- stack := Constructor()
- stack.Push(1)
- fmt.Println(stack.Top())
- fmt.Println(stack.GetMin())
- }
|