LeetCode-155最小栈
本文最后更新于:2025年2月11日 上午
LeetCode-155最小栈
题目描述
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
示例 1:
1 |
|
提示:
-231 <= val <= 231 - 1
pop
、top
和getMin
操作总是在 非空栈 上调用push
,pop
,top
, andgetMin
最多被调用3 * 104
次
题解
方法一-辅助栈
利用一个辅助栈 min_stack
来存储当前栈中的最小值。每次 push
操作时,将当前值与 min_stack
栈顶的最小值比较,并将较小者压入 min_stack
。这样,min_stack
的栈顶始终是当前栈中的最小值。
1 |
|
复杂度分析
- 时间复杂度:
push
、pop
、top
和getMin
操作均为O(1)
。 - 空间复杂度:
O(n)
,需要额外的辅助栈存储最小值。
方法二-差值法
通过存储元素与当前最小值的差值,减少额外空间的使用,并在操作中动态维护最小值。
- 差值存储:每个元素入栈时,存储其与当前最小值的差值(而不是实际值)。
- 动态维护最小值:当遇到更小的元素时,更新最小值;当弹出导致最小值变化的元素时,逆向恢复之前的最小值。
- 高效解码:在获取栈顶元素时,根据差值和当前最小值还原实际值。
1 |
|
复杂度分析
- 时间复杂度:
push
、pop
、top
、getMin
均为O(1)
,仅涉及常数次算术和栈操作。
- 空间复杂度:
O(n)
,其中n
为栈中元素数量。每个元素存储一个差值,最坏情况下与普通栈空间相同,但避免了显式存储冗余的最小值。
LeetCode-155最小栈
https://furthur509.github.io/2025/02/11/LeetCode-155最小栈/