题目:
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
思路:
常数时间内检索到最小元素——每次入栈求最小元素——设计辅助栈存储当前最小元素
代码:
class MinStack {
stack<int> s;
stack<int> minstack;
public:
MinStack() {
minstack.push(INT_MAX);
}
void push(int x) {
s.push(x);
minstack.push(min(minstack.top(),x));
}
void pop() {
s.pop();
minstack.pop();
}
int top() {
return s.top();
}
int getMin() {
return minstack.top();
}
};
收获:
求栈的最大值最小值,要求在常数时间内返回的,可以使用辅助栈存储目前为止的最大或最小值。