题目地址:力扣
解法1:可以使用multiset来对元素进行保存,因为multiset总是有序的,因此可以快速得到栈中最小的元素。(由于栈中可能存在相同的元素,因此不能用set,否则删除一个的时候会全部删掉)
class MinStack {
public:
MinStack() {}
void push(int val) {
stk.push(val);
iset.insert(val);
}
// 出栈的时候使用find找到一个实例并且删除
// 若使用参数为值的erase就会把所有的值都删掉
void pop() {
iset.erase(iset.find(stk.top()));
stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return *iset.cbegin();
}
private:
stack<int> stk;
multiset<int> iset;
};
解法2:辅助栈,主栈和辅助栈共同进退,唯一不同的就是辅助栈保存的是每一次操作后,当前栈中的最小值。因此也可以快速找到最小的元素
class MinStack {
public:
MinStack() {}
void push(int val) {
stk.push(val);