LeetCode 题解工作台
最小栈
设计一个支持 push , pop , top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部…
2
题型
8
代码语言
3
相关题
当前训练重点
中等 · 栈·状态
答案摘要
我们用两个栈来实现,其中 `stk1` 用来存储数据,`stk2` 用来存储当前栈中的最小值。初始时,`stk2` 中存储一个极大值。 - 当我们向栈中压入一个元素 时,我们将 压入 `stk1`,并将 `min(x, stk2[-1])` 压入 `stk2`。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 栈·状态 题型思路
题目描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack()初始化堆栈对象。void push(int val)将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top()获取堆栈顶部的元素。int getMin()获取堆栈中的最小元素。
示例 1:
输入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]] 输出: [null,null,null,null,-3,null,0,-2] 解释: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.
提示:
-231 <= val <= 231 - 1pop、top和getMin操作总是在 非空栈 上调用push,pop,top, andgetMin最多被调用3 * 104次
解题思路
方法一:双栈
我们用两个栈来实现,其中 stk1 用来存储数据,stk2 用来存储当前栈中的最小值。初始时,stk2 中存储一个极大值。
- 当我们向栈中压入一个元素 时,我们将 压入
stk1,并将min(x, stk2[-1])压入stk2。 - 当我们从栈中弹出一个元素时,我们将
stk1和stk2的栈顶元素都弹出。 - 当我们要获取当前栈中的栈顶元素时,我们只需要返回
stk1的栈顶元素即可。 - 当我们要获取当前栈中的最小值时,我们只需要返回
stk2的栈顶元素即可。
每个操作的时间复杂度为 。整体的空间复杂度为 ,其中 为栈中元素的个数。
class MinStack:
def __init__(self):
self.stk1 = []
self.stk2 = [inf]
def push(self, val: int) -> None:
self.stk1.append(val)
self.stk2.append(min(val, self.stk2[-1]))
def pop(self) -> None:
self.stk1.pop()
self.stk2.pop()
def top(self) -> int:
return self.stk1[-1]
def getMin(self) -> int:
return self.stk2[-1]
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Looking for efficient O(1) time complexity for all operations.
- question_mark
Check if the candidate handles the edge cases when the stack becomes empty.
- question_mark
Evaluate if the solution maintains stack synchronization properly, particularly with respect to the minimum tracking.
常见陷阱
外企场景- error
Incorrect handling of stack underflow, especially for pop and getMin operations.
- error
Failure to maintain the correct minimum values when elements are popped.
- error
Confusion about how to manage two stacks or how to update the minimum value stack.
进阶变体
外企场景- arrow_right_alt
Implementing a stack that supports additional operations like peek.
- arrow_right_alt
Designing a thread-safe version of the MinStack for concurrent operations.
- arrow_right_alt
Optimizing space by reducing auxiliary stack usage while maintaining O(1) time complexity.