155. 最小栈
1. 题目
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
示例 1:
1 | 输入: |
提示:
-2^31 <= val <= 2^31 - 1
pop
、top
和getMin
操作总是在 非空栈 上调用push
,pop
,top
, andgetMin
最多被调用3 * 10^4
次
2. 思路
- 已知题目要求使用常量时间来检索到栈内最小的元素值,同时已知栈最多被调用
3 * 10 ^ 4
次 - 初始化
stack
数组和minStack
数组,其中minStack
数组用于记录递减的数值 - 当执行
push
命令时,当minStack
数组为空或当前推入栈的值小于等于minStack
栈顶元素时。将值对应写入至minStack
中 - 当执行
pop
命令时,如果推出的值与minStack
的栈顶元素相同,同步推出minStack
的栈顶元素 - 当执行
getMin
命令时,只需要推出实时维护好的minStack
栈顶元素 - 由于栈的特性是先进先出,得益于该机制,可以使得
minStack
只需要关注递减序列即可
3. 代码
1 | class MinStack { |
4. 复杂度
- 时间复杂度:O(1)
- 空间复杂度:O(n)