最小栈设计并实现一个minstack类
时间: 2023-04-14 08:01:44 浏览: 126
最小栈是一种特殊的栈,除了支持普通栈的操作外,还支持在常数时间内获取栈中的最小元素。设计一个minstack类,实现以下功能:
1. push(x):将元素x压入栈中。
2. pop():弹出栈顶元素。
3. top():获取栈顶元素。
4. getMin():获取栈中的最小元素。
实现思路:
为了支持常数时间内获取最小元素,我们需要在栈中维护一个辅助栈,用于存储当前栈中的最小元素。每次压入元素时,如果该元素比辅助栈的栈顶元素小,则将该元素也压入辅助栈中;否则,将辅助栈的栈顶元素再次压入辅助栈中。弹出元素时,同时弹出栈和辅助栈的栈顶元素即可。
代码实现:
class MinStack {
private:
stack<int> s;
stack<int> minStack;
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
s.push(x);
if (minStack.empty() || x <= minStack.top()) {
minStack.push(x);
} else {
minStack.push(minStack.top());
}
}
void pop() {
s.pop();
minStack.pop();
}
int top() {
return s.top();
}
int getMin() {
return minStack.top();
}
};
阅读全文