O(1)时间getMin()的特殊栈
为了能够满足时间复杂度,必然是需要空间的付出,所以可以考虑利用两个栈来实现这个特殊的栈
一个数据栈保存所有数据,一个最小数栈保存对应状态下的最小值。代码如下
class Solution {
public:
//只有最小栈本身为空或者当前的值小于等于最小栈的栈顶就push
//此处的等于必须包含,仔细领会。关键
void push(int value) {
if(stackMin.empty() || value<=stackMin.top())
stackMin.push(value);
stackData.push(value);
}
//弹出的数据等于最小栈顶的数据,最小栈的数据也要弹出
void pop() {
if(!stackData.empty()){
if(stackMin.top()==stackData.top())
stackMin.pop();
stackData.pop();
}
}
int top() {
return stackData.top();
}
int min() {
return stackMin.top();
}
private:
stack<int> stackData;
stack<int> stackMin;
};