Law one:
class MinStack {
public:
stack<int>st;
stack<int>helper;
MinStack() {
}
void push(int val) {
st.push(val);
if(helper.empty()||helper.top()>val)helper.push(val);
else helper.push(helper.top());
}
void pop() {
st.pop();
helper.pop();
}
int top() {
return st.top();
}
int getMin() {
return helper.top();
}
};
Method two:
class MinStack {
public:
stack<pair<int,int>>st;
MinStack() {
}
void push(int val) {
if(st.empty()||st.top().second>val){
st.push({
val,val});
}else{
st.push({
val,st.top().second});
}
}
void pop() {
st.pop();
}
int top() {
return st.top().first;
}
int getMin() {
return st.top().second;
}
};