Menu
CoddyTech

Min Stack

中等栈python iconjava iconcpp iconc iconjs icon+10

设计一个栈,除了常见的 push、pop 和 top,还可以通过 getMin 报告栈中最小的值。四种操作都必须在 O(1) 时间内完成。

你会按顺序获得操作列表 ops,其中 args[i] 在执行入栈操作时保存对应的值,在执行其他操作时均为 0。在一个初始为空的栈上依次执行这些操作,并为每个操作返回一个字符串:"null" 表示 push 和 pop,top 和 getMin 则返回文本形式的数字。

函数

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

约束条件

  • 1 ≤ ops.length ≤ 3000
  • args.length == ops.length
  • 每个 ops[i] 都是 push、pop、top 或 getMin。
  • -231+1 ≤ args[i] ≤ 231-1(入栈时),其他任何操作时 args[i] == 0。
  • pop、top 和 getMin 只会在栈中至少有一个值时调用。

示例

输入
ops = ["push", "push", "push", "getMin", "pop", "top", "pop", "getMin"]args = [4, 1, 7, 0, 0, 0, 0, 0]
输出
["null", "null", "null", "1", "null", "1", "null", "4"]
解释
从底部向上,栈中依次是 4、1 和 7,所以最小值是 1。弹出 7 后,1 就到了栈顶。再弹出 1 后,栈中只剩下 4,所以最小值又变回 4。
challenge icon

进阶

你能构建一个先进先出队列,并让它在摊还 O(1) 时间内报告最小值吗?

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

测试 #1

测试 #2

测试 #3

参数

ops = ["push", "push", "push", "getMin", "pop", "top", "pop", "getMin"]
args = [4, 1, 7, 0, 0, 0, 0, 0]

预期输出

["null", "null", "null", "1", "null", "1", "null", "4"]