剑指 Offer 09. 用两个栈实现队列
type CQueue struct {
stackIn []int
stackOut []int
}
func Constructor() CQueue {
return CQueue{
stackIn:make([]int,0),
stackOut:make([]int,0),
}
}
func (this *CQueue) AppendTail(value int) {
this.stackIn = append(this.stackIn, value)
}
func (this *CQueue) DeleteHead() int {
if len(this.stackOut) == 0 {
for len(this.stackIn) != 0 {
temp := this.stackIn[len(this.stackIn)-1]
this.stackIn = this.stackIn[:len(this.stackIn)-1]
this.stackOut = append(this.stackOut, temp)
}
}
if len(this.stackOut) != 0 {
ans := this.stackOut[len(this.stackOut)-1]
this.stackOut = this.stackOut[:len(this.stackOut)-1]
return ans
}
return -1
}
剑指 Offer 30. 包含min函数的栈
// 维护一个单调栈minstack,里面的栈顶存放最小值。
type MinStack struct {
normal []int
minstack []int
}
/** initialize your data structure here. */
func Constructor() MinStack {
return MinStack{
normal:make([]int,0),
minstack:make([]int,0),
}
}
func (this *MinStack) Push(x int) {
this.normal = append(this.normal, x)
if len(this.minstack) == 0 || x <= this.minstack[len(this.minstack)-1] {
this.minstack = append(this.minstack, x)
}
}
func (this *MinStack) Pop() {
if this.normal[len(this.normal)-1] == this.minstack[len(this.minstack)-1] {
this.minstack = this.minstack[:len(this.minstack)-1]
}
this.normal = this.normal[:len(this.normal)-1]
}
func (this *MinStack) Top() int {
return this.normal[len(this.normal)-1]
}
func (this *MinStack) Min() int {
return this.minstack[len(this.minstack)-1]
}