实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。
思路:用两个栈,左边栈正常存储,右边栈保存当前最小元素值,每次入栈时和栈顶元素比较如果比栈顶小入栈,否则将栈顶的元素再入栈一次。
class mystack{
public:
void push(int data){
s1.push(data);
if (s2.empty())
s2.push(data);
else
{
int top = s2.top();
if (data < top)
s2.push(data);
else
s2.push(top);
}
}
void pop(){
s1.pop();
s2.pop();
}
int getMin(){
return s2.top();
}
public:
stack<int>s1;
stack<int>s2;
};