思路:辅助栈,一个栈保存已有数据,另一个栈存储单调栈(用于获取最小值,单调栈直接pop即可)
MinStack() {
}
void push(int val) {
st1.push(val);
if (st2.empty() || val <= st2.top()) {
st2.push(val);;
}
}
void pop() {
int value = st1.top();
st1.pop();
if (value == st2.top()) {
st2.pop();
}
}
int top() {
return st1.top();
}
int getMin() {
return st2.top();
}
stack<int> st1;
stack<int> st2;
思路2:栈 + 当前最小值;min_value用户存储当前结果的最小值;为什么pop和push需要两次:stack中保存当前最小值(本次值还未进行pop和push) + 修改最小值之后的最小值(pop和push之后的最小值);
MinStack() {
//当前stack最小值
min_value = INT_MAX;
}
void push(int val) {
if (val <= min_value) {
// 保留次最小值,方便pop直接赋值
st1.push(min_value);
min_value = val;
}
st1.push(val);
}
void pop() {
int value = st1.top();
st1.pop();
//次最小值直接获取
if (value == min_value) {
min_value = st1.top();
st1.pop();
}
}
int top() {
return st1.top();
}
int getMin() {
return min_value;
}
stack<int> st1;
int min_value;