题目:
实现一个特殊的栈,要求除了实现基本栈功能,还需要实现返回栈中最小元素的功能。
要求:
pop() push() top() min()等操作的时间复杂度均为O(1)。
思路:
考虑使用2个栈,一个用于保存待压入的数据,另一个栈专门用于保存最小值。
初始:2个栈都为空 将元素都压入进去。
之后:如果待压入的元素 <= 最小值栈的栈顶元素 那么同样需要将元素压进2个栈。
否则 只需要将元素压进数据栈。
贴代码:
stack<int> numStack; // 记录装入数据的栈
stack<int> minStack; // 记录最小值的栈
void push(int value)
{
// 如果minStack为空 将value压入进去
if(minStack.empty())
{
minStack.push(value);
}
// 否则 需要比较 minStack的栈顶元素和value的大小
else
{
// value <= 栈顶元素 需要将value压栈
if(value <= minStack.top())
{
minStack.push(value);
}
}
numStack.push(value);
}
void pop()
{
if (numStack.empty())
{
return;
}
if (numStack.top() == minStack.top())
{
minStack.pop();
}
numStack.pop();
}
int top()
{
if(!numStack.empty())
return numStack.top();
}
int min()
{
if(!minStack.empty())
return minStack.top();
}