用一个栈存储数据
再用另外一个栈统计每次push后的最小值。
pop()时两个栈同时pop
getMin()返回最小栈的栈顶元素
#include<stack>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
#define LOG(x) std::cout<<x<<std::endl;
class MinStack
{
public:
void push(int x) {
s.push(x);
Min = min(Min, x);
minstack.push(Min);
}
int pop() {
if (s.empty())
return -1;
int top = s.top();
s.pop();
minstack.pop();
return top;
}
int getMin() {
if (s.empty()) return -1;
return minstack.top();
}
private:
stack<int> s;
stack<int> minstack;
int Min=INT_MAX;
};
int main() {
MinStack *s = new MinStack();
s->push(2);
s->push(1);
LOG(s->getMin())
LOG(s->pop())
LOG(s->getMin())
cin.get();
}