Menu
CoddyTech

Implement Stack using Queues

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

构建一个后进先出的栈,唯一的存储结构是队列。队列只能在末尾添加元素、移除或读取队首元素,并报告自身大小。栈支持 push x(将 x 放到栈顶)、pop(移除并返回栈顶元素)、top(返回栈顶元素并保留它)和 empty(栈是否为空?)。

操作按顺序存放在 ops 中,其中 args[i] 保存 push 操作的值,其他情况下为 0。在一个空栈上依次执行这些操作,并为每个操作返回一个字符串:push 操作返回 "null",pop 或 top 操作返回以文本形式表示的数字,empty 操作返回 "true" 或 "false"。

函数

stackOps(ops: string-array, args: integer-array) → string-array
opsstring-array
这些操作,按运行顺序排列
argsinteger-array
每次入栈的值,其他所有操作均为 0
返回值string-array
每次操作提供一个答案,以文本形式

约束条件

  • 1 ≤ ops.length ≤ 1000
  • args.length == ops.length
  • 每个 ops[i] 都是 push、pop、top 或 empty。
  • -109 ≤ args[i] ≤ 109 表示执行 push 操作,args[i] == 0 表示执行其他任何操作。
  • 只有当栈中至少有一个元素时,才会调用 pop 和 top。

示例

输入
ops = ["push", "push", "top", "pop", "empty"]args = [1, 2, 0, 0, 0]
输出
["null", "null", "2", "2", "false"]
解释
2 最后放入,所以它在顶部:top 和 pop 都会返回 "2"。1 仍然在里面,所以 empty 会返回 "false"。
challenge icon

进阶

你能否保留一个队列,但把工作从 push 移到 pop,这样 push 的时间复杂度就是 O(1)?

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

测试 #1

测试 #2

测试 #3

参数

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

预期输出

["null", "null", "2", "2", "false"]