最小栈设计并实现一个MinStack类c++实现
时间: 2024-03-26 14:38:38 浏览: 69
好的,以下是一个简单的MinStack类的C++实现:
```cpp
#include <stack>
class MinStack {
private:
std::stack<int> s;
std::stack<int> minS; // 用于保存每个状态下的最小值
public:
void push(int x) {
s.push(x);
if (minS.empty() || x <= minS.top()) {
minS.push(x);
}
}
void pop() {
if (s.top() == minS.top()) {
minS.pop();
}
s.pop();
}
int top() {
return s.top();
}
int getMin() {
return minS.top();
}
};
```
在这个实现中,我们使用两个栈来实现MinStack类。一个栈用于保存所有的元素,另一个栈用于保存每个状态下的最小值。
当我们向栈中添加元素时,我们首先将元素压入第一个栈中,然后检查第二个栈中的元素。如果第二个栈为空,或者新元素小于等于第二个栈中的栈顶元素,我们就将新元素压入第二个栈中。这样,第二个栈中的栈顶元素就始终是当前栈中的最小元素。
当我们从栈中弹出元素时,我们首先从第一个栈中弹出元素,然后检查它是否等于第二个栈中的栈顶元素。如果是,我们就将第二个栈中的栈顶元素弹出。这样,第二个栈中的栈顶元素就始终是当前栈中的最小元素。
需要注意的是,由于我们在第二个栈中保存了每个状态下的最小值,所以在调用getMin()方法时,我们只需要返回第二个栈中的栈顶元素即可。
阅读全文