简单版
package main
import "fmt"
type Stack struct {
Value []int
MaxV int
MinV int
}
func (this *Stack) Push(i int) {
this.Value = append(this.Value, i)
if i > this.MaxV {
this.MaxV = i
}
if this.MinV == 0 || i < this.MinV {
this.MinV = i
}
}
func (this *Stack) Pop() (i int) {
l := len(this.Value)-1
i = this.Value[l]
this.Value = this.Value[0:l-1]
return
}
func (this *Stack) Max() (i int) {
return this.MaxV
}
func (this *Stack) Min() (i int) {
return this.MinV
}
func main() {
arr := []int{1,5,8,2,4,6,9,3}
s := Stack{
Value: nil,
MaxV: 0,
MinV: 0,
}
for _, v := range arr {
s.Push(v)
}
top := s.Pop()
maxv := s.MaxV
minV := s.MinV
fmt.Printf("top : %d, maxV : %d, minV : %d", top, maxv, minV)
}
其他版
解题思路:采用同步栈实现,共用一个top指针,副本栈的当前栈顶元素存储当前栈内最大元素
感觉这种的空间复杂度比较大,没有去代码实现。todo