在栈的结构上多加一个getMin方法,返回栈中的最小值。
使用两个栈,一个来保存原有的值,另外一个初始push进去第一个值,当push第二个的时候,检查是不是比第一个小,如果比第二个栈的栈顶小,那么就push进去。
// 155 Min Stack
class MinStack{
/** initialize your data structure here. */
public:
MinStack() {
}
void push(int x) {
s.push(x);
if (m.empty() || x < m.top())
{
m.push(x);
}
}
void pop() {
if (s.top() == m.top())
{
m.pop();
}
s.pop();
}
int top() {
return s.top();
}
int getMin() {
return m.top();
}
private:
stack<int> s;
stack<int> m; // min
};
不知道为啥我这个版本运行时出错。
class MinStack {
private:
stack<int> s1;
stack<int> s2;
public:
void push(int x) {
s1.push(x);
if (s2.empty() || x <= getMin()) s2.push(x);
}
void pop() {
if (s1.top() == getMin()) s2.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return s2.top();
}
};