题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:
建立一个数据栈,一个辅助栈。数据栈正常存取数据,辅助栈存取最小值。
push函数:做入栈操作时,数据栈正常入栈,辅助栈需要对辅助栈栈顶数据与当前输入数据做比较,当前值更小才入辅助栈,为空则直接入栈;
pop函数:数据栈正常出栈,如果数据栈栈顶与辅助栈栈顶相同,则两个栈同时出栈;
top函数:如果辅助栈不为空,则返回辅助栈栈顶;否则返回数据栈栈顶;
min函数:返回top函数。
代码:
class Solution {
public:
void push(int value) {
data.push(value);
if(helper.empty()) helper.push(value);
else
{
if(helper.top()>value)
helper.push(value);
}
}
void pop() {
if(data.top()==helper.top())
{
data.pop();
helper.pop();
}
else data.pop();
}
int top() {
if(!helper.empty()) return helper.top();
else return data.top();
}
int min() {
return top();
}
private:
stack<int> data;
stack<int> helper;
};