S2中每个元素添加一个计数器。这样当连续3次2出栈,S2中的2才出栈。
#include <iostream>
#include <stack>
struct DataCount
{
int data;
int count;
DataCount(int vData = std::numeric_limits<int>::infinity()) : data(vData), count(0) {}
};
class Stack
{
public:
Stack() {}
~Stack() {}
void push(int vData)
{
m_Data.push(vData);
if (m_MinData.empty())
{
m_MinData.push(DataCount(vData));
}
else
{
if (vData < m_MinData.top().data)
{
m_MinData.push(DataCount(vData));
}
else if (vData == m_MinData.top().data)
{
++m_MinData.top().count;
}
}
}
void pop()
{
if (m_Data.empty())
{
std::cout << "Empty stack\n";
return;
}
int Data = m_Data.top();
m_Data.pop();
if (Data == m_MinData.top().data)
{
if (--m_MinData.top().count == 0)
{
m_MinData.pop();
}
}
}
int getMin()
{
if (m_MinData.empty())
{
std::cout << "Empty stack\n";
return;
}
return m_MinData.top().data;
}
private:
std::stack<int> m_Data;
std::stack<DataCount> m_MinData;
};011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
原文地址:http://blog.csdn.net/xiaoliangsky/article/details/38762113