题目:实现一个特殊的栈,在实现栈基本功能的基础上,再实现返回栈中最小元素的操作。要求pop、push、getMin时间复杂度都是O(1),设计时使用现成的栈结构。
用C++实现了一下。
template <typename T>
class MyStack
{
public:
void Push(const T& t)
{
m_data.push(t);
if (m_min.empty() || t <= m_min.top())
{
m_min.push(t);
}
}
void Pop()
{
if (!m_min.empty() && m_data.top() <= m_min.top())
{
m_min.pop();
}
m_data.pop();
}
T Top() const
{
if (m_data.empty())
{
throw std::out_of_range("MyStack::m_data is empty.");
}
return m_data.top();
}
bool Empty()
{
return m_data.empty();
}
T GetMin() const
{
if (m_min.empty())
{
throw std::out_of_range("MyStack::m_min is empty.");
}
return m_min.top();
}
private:
stack<T> m_data;
stack<T> m_min;
};