大致意思就是设计一个堆, push, pop, top, 和返回最小值。
在这里,我使用的是 Int 对堆栈。 该对的第一个值将存储普通堆栈的元素,第二个值将存储堆栈中该点的最小值。 因此,即使堆栈的最小元素从顶部移除,我们仍然拥有该对中下一个最小元素的备份。 因此,对于压入堆栈的每个元素,它都会存储其对应的最小值。
class MinStack {
public:
vector< pair<int,int> > s;
MinStack() { }
void push(int val) {
if(s.empty())
s.push_back({val,val});
else
s.push_back({val,min(s.back().second,val)});
}
void pop() { s.pop_back(); }
int top() { return s.back().first; }
int getMin() { return s.back().second; }
};