#P4026. 最小栈

最小栈

题目内容

设计一个支持 pushpushpoppoptoptop操作,并能在常数时间内检索到最小元素的栈。

实现 MinStackMinStack 类:

  • MinStack()MinStack() 初始化堆栈对象。

  • voidpush(intval)void push(int val) 将元素val推入堆栈。

  • voidpop()void pop() 删除堆栈顶部的元素。

  • inttop()int top() 获取堆栈顶部的元素。

  • intgetMin()int getMin() 获取堆栈中的最小元素。

输入描述

输入包含多行:

  • 第一行是一个整数 n,表示操作次数
  • 接下来的 n 行,每行包含一个操作:
    • "push x" (x 是整数):将 x 推入栈
    • "pop":弹出栈顶元素
    • "top":获取栈顶元素
    • "getMin":获取栈中最小元素

输出描述

对于每个 "top" 和 "getMin" 操作,输出对应的结果(每行一个整数)。其他操作无需输出。

样例1

输入

7
push -2
push 0
push -3
getMin
pop
top
getMin

输出

-3
0
-2

说明

  • MinStack minStack = new MinStack();
  • minStack.push(-2); // 栈:[-2]
  • minStack.push(0); // 栈:[-2, 0]
  • minStack.push(-3); // 栈:[-2, 0, -3]
  • minStack.getMin(); // 返回 -3
  • minStack.pop(); // 栈:[-2, 0]
  • minStack.top(); // 返回 0
  • minStack.getMin(); // 返回 -2

提示

  • 231<=val<=2311-2^{31} <= val <= 2^{31} - 1
  • poppoptoptopgetMingetMin操作总是在非空栈上调用
  • pushpush, poppop, toptop, and getMinand\ getMin最多被调用 31043 * 10^4