使用O(1)的时间复杂度找出最小元素
2018-12-04 本文已影响2人
飞白非白
// 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)
// 的时间复杂度为O(1)
// 定义两个栈分别为s1,s2。我们用s2保存最小值,s1保存原来的值
void Push(const T&x)
{
s1.push(x);
if (s2.empty() || x < s2.top())
{
s2.push(x);
}
else
{
s2.push(s2.top());
}
}
void Pop()
{
s1.pop();
s2.pop();
}
T GetMin()
{
if (!s2.empty())
{
return s2.top();
}
}