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 - 1pop、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最小栈/