题目来自剑指offer
题目
思路:除了栈的基本结构以外,另外维护一个数组保存最小值
代码
#include <iostream>
#include <assert.h>
using namespace std;
class Stack
{
public:
Stack();
int Pop();
void Push(int nData);
int Min();
private:
int m_nTop;
int m_nArrData[100];
int m_nArrMin[100];
};
Stack::Stack()
{
m_nTop = -1;
}
int Stack::Pop()
{
assert(m_nTop >= 0);
return m_nArrData[m_nTop--];
}
void Stack::Push(int nData)
{
assert(m_nTop < 99);
m_nArrData[++m_nTop] = nData;
//设置最小值数组
if (m_nTop == 0 || nData < m_nArrMin[m_nTop - 1])
{
m_nArrMin[m_nTop] = nData;
}
else
{
m_nArrMin[m_nTop] = m_nArrMin[m_nTop - 1];
}
}
int Stack::Min()
{
assert(m_nTop > -1);
return m_nArrMin[m_nTop];
}
int main()
{
int nArr[4] = {3,4,2,1};
Stack s;
for (int i = 0;i < 4;i++)
{
s.Push(nArr[i]);
cout<<"Min Num: "<<s.Min()<<endl;
}
for (int i = 0;i < 4;i++)
{
cout<<"Min Num: "<<s.Min()<<endl;
s.Pop();
}
return 1;
}