每日一题(34) - 包含最小值Min函数的栈

题目来自剑指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;
}


你可能感兴趣的:(每日一题(34) - 包含最小值Min函数的栈)