题目:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
------------------------------------------------------------------------------------------------------------------
解题:
这题的要点是利用两个栈结构,其中st1和平常的栈一样,对push和pop操作没什么特别;关键是第二个栈st2,这个栈的操作如下:
对push操作(假设将要push的元素为a):1.如果st2空,则直接push元素a
2.反之st2非空,将栈顶元素和要push的元素a比较,如果top<a,则st2.push(st2.top());不然st2.push(a);
对pop操作:和普通的pop一样,弹出栈顶
对min操作:直接返回st2.top()就行
下面我们模拟一下这个栈的操作过程:假设要push 5 2 3 1 4这几个元素
代码:
class myStack
{
private:
stack<int> st1;
stack<int> st2;
public:
void push(int a)
{
st1.push(a);
if(st2.empty())
st2.push(a);
else
{
if(st2.top()>a)
st2.push(a);
else
st2.push(st2.top);
}
}
void pop()
{
st1.pop();
st2.pop();
}
int min()
{
return st2.top();
}
};
最后,免责说明:
本人对文章的准确性专业性权威性不负任何责任,望各位睁大眼睛自己甄别,如有错误或更好的见解请在评论中指出,谢谢!