7-2 最小栈设计并实现一个MinStack类
时间: 2024-03-26 20:38:29 浏览: 99
好的,这是一个经典的算法问题。MinStack类需要支持以下操作:
1. push(x):将元素x插入到栈中
2. pop():删除栈顶元素
3. top():获取栈顶元素
4. getMin():获取栈中最小元素
我们可以使用两个栈来实现MinStack类,一个栈用来存储元素,另一个栈用来存储当前最小元素。
具体实现如下:
```python
class MinStack:
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, x: int) -> None:
self.stack.append(x)
if not self.min_stack or x <= self.min_stack[-1]:
self.min_stack.append(x)
def pop(self) -> None:
if self.stack.pop() == self.min_stack[-1]:
self.min_stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
```
在push操作中,如果当前元素小于等于最小元素栈的栈顶元素,则将该元素也插入最小元素栈中。在pop操作中,如果弹出的元素是最小元素,则同步弹出最小元素栈中的栈顶元素。在top和getMin操作中,直接返回元素栈和最小元素栈的栈顶元素即可。
这样,我们就成功地实现了一个支持快速获取最小元素的栈。
阅读全文