Menu
CoddyTech

Implement Queue Using Stacks

简单队列栈python iconjava iconcpp iconc iconjs icon+10

用两个栈作为唯一的存储空间,构建一个先进先出的队列。栈只能在顶部添加元素、移除顶部元素、读取顶部元素,以及判断栈是否为空。队列支持 push x(在队尾添加 x)、pop(移除并返回队首元素)、peek(返回队首元素)和 empty(队列是否为空?)。

你会按顺序获得操作,存放在 ops 中,其中 args[i] 保存 push 操作的值,其他操作对应的值均为 0。在一个初始为空的队列上依次执行这些操作,并为每个操作返回一个字符串:"null" 表示 push,pop 或 peek 返回的数字以文本形式表示,"true" 或 "false" 表示 empty 的结果。

函数

queueOps(ops: string-array, args: integer-array) → string-array
opsstring-array
这些操作及其运行顺序
argsinteger-array
每次执行 push 时的值,其他操作均为 0
返回值string-array
每项操作对应一个答案,格式为文本

约束条件

  • 1 ≤ ops.length ≤ 2000
  • args.length == ops.length
  • 每个 ops[i] 都是 push、pop、peek 或 empty。
  • -109 ≤ args[i] ≤ 109 表示 push 操作时的范围,其他操作则要求 args[i] == 0。
  • pop 和 peek 只有在队列中至少有一项时才会被调用。

示例

输入
ops = ["push", "push", "peek", "pop", "empty"]args = [1, 2, 0, 0, 0]
输出
["null", "null", "1", "1", "false"]
解释
先推入 1,再推入 2,队首是 1,因此 peek 和 pop 都返回 "1"。2 仍在里面,所以 empty 返回 "false"。
challenge icon

进阶

怎样添加一个 back 操作,以 O(1) 的时间复杂度返回最新的项,同时不影响其他操作的均摊复杂度?

重置代码
def queueOps(ops, args):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

ops = ["push", "push", "peek", "pop", "empty"]
args = [1, 2, 0, 0, 0]

预期输出

["null", "null", "1", "1", "false"]