
题意
["CQueue","appendTail","deleteHead","deleteHead"]
这一行表示每一行代码的操作
[[],[3],[],[]]
这个表示每一行代码操作所需要的参数
举例:
CQueue 表示新建一个CQueue对象(队列),对应的所需参数为[],即此操作不需要参数。
appendTail 表示执行一个appendTail()操作,对应要被操作的元素为3。
deleteHead 表示执行一个deleteHead()操作,对应的所需参数为[],即此操作不需要参数。
以上的输入其实是一个代码执行的步骤描述与其对应所需参数。
即两个纬度:
1、操作描述
2、此次操作所需参数
3、操作描述与操作所需参数是通过默认顺序一一对应的
实例1
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:
[null,null,3,-1]
1.创建队列,返回值为null
2.将3压入栈,返回值为null
3.将栈底的元素删除,也就是消息队列中先进来的元素,所以是deleteHead,
返回该元素的数值,所以为3
4.继续删除栈底的元素,但是没有元素了,所以返回-1
所以就有了下面的输出 输出:[null,null,3,-1]
解题
type CQueue struct {
in []int
out []int
}
func Constructor() CQueue {
return CQueue{}
}
func (this *CQueue) AppendTail(value int) {
this.in = append(this.in, value)
}
func (this *CQueue) DeleteHead() int {
if len(this.out) == 0 && len(this.in)==0{
return -1
if len(this.out) == 0{
if len(this.in) != 0{
for len(this.in)>0 {
index := len(this.in)-1
value := this.in[index]
this.in = this.in[:index]
this.out = append(this.out, value)
}
}
}
outindex := len(this.out) - 1
outvalue := this.out[outindex]
this.out = this.out[:outindex]
return outvalue
}