题目链接
题目描述(Description)
Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
getMin() – Retrieve the minimum element in the stack.
带有最小值操作的栈
设计一个栈使其支持压入、弹出、返回栈顶元素和及时返回栈的最小元素。
push(x) –把元素x压入栈中
pop() –移除栈顶元素
top() –得带栈顶元素
getMin() –获得栈的最小元素
分析(Analysis)
本题用C++做非常简单,因为C++里的封装了stack的基本操作。
本题的难点在于如果获得最小元素,这里要求时间复杂度为O(1),那么通过遍历的方法找最小值的方法在这里是行不通的。
我们可以通过维护一个minStack
的栈,栈顶元素是当前栈里所有元素的最小值,只要把minStack
的栈顶元素返回即可。
代码(Code)
class MinStack {
public:
void push(int x) {
s.push(x);
if(minS.empty()||minS.top()>=x)
minS.push(x);
}
void pop() {
if(s.top()==minS.top())
minS.pop();
s.pop();
}
int top() {
return s.top();
}
int getMin() {
return minS.top();
}
stack<int> s;
stack<int> minS;
};