自己的的做法
具体:返回栈中最小值->multiset实现。
class MinStack {
public:
stack<int> stk;
multiset<int> st; //
MinStack() {
}
void push(int val) {
stk.push(val);
st.insert(val);
}
void pop() {
st.erase(st.find(stk.top()));
stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return *st.begin();
}
};
易错点:
1:不能使用set,因为会自动去重!!!
2:使用multiset的话,删除某个元素其中一个,不能写erase(元素值),应该是erase(mst.find(元素值))!!!
更优: push() pop()降到O(1)
具体:使用两个栈实现。一个正常用stk,一个存放最小值min_stk。//min_stk跟stk元素个数相同,栈顶始为最小值
class MinStack {
public:
stack<int> stk;
stack<int> min_stk;
MinStack() {
}
void push(int val) {
stk.push(val);
if (min_stk.empty()) min_stk.push(val);
else min_stk.push(min(min_stk.top(), val));
}
void pop() {
stk.pop();
min_stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return min_stk.top();
}
};