19、包含Min函数的栈
题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
解题思路:
把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)都保存起来放到另外一个辅助栈里。下图展示了栈内压入3、4、2、1之后接连两次弹出栈顶数字再压入0时,数据栈、辅助栈和最小值的状态。
从表中我们可以看出,如果每次都把最小元素压入辅助栈,那么就能保证辅助栈的栈顶一直都是最小元素。
Demo:
class Solution {
public:
stack<int> st1;
// 使用一个辅助栈
stack<int> stmp;
void push(int value) {
st1.push(value);
if (stmp.empty() || value < stmp.top())
stmp.push(value);
else
stmp.push(stmp.top());
}
void pop() {
st1.pop();
stmp.pop();
}
int top() {
return st1.top();
}
int min() {
return stmp.top();
}
};