本文最后更新于:2020年6月28日 下午

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

实现如下:

//利用一个辅助栈,用来存放和数据栈相对应的每层之下的最小值
//利用minValue存储当前最小值,O(1)
class Solution 
{
public:
	int minValue = 0;
	stack<int> assistStack;
	stack<int> dataStack;
	void push(int value) 
	{
		dataStack.push(value);
		if (dataStack.size() == 1)//此时value为第一个元素,直接将value push进辅助栈,及当前最小值
		{
			assistStack.push(value);
			minValue = value;
		}
		else//否则用minValue与value比较,小的push进辅助栈,且更新minValue
		{
			if (value < minValue)
				minValue = value;
			assistStack.push(minValue);
		}
	}
	void pop() 
	{
		if (!dataStack.empty())//非空时操作
		{
			dataStack.pop();
			assistStack.pop();//更新辅助栈,保证每层之下的最小值不变
			minValue = assistStack.top();//将minValue更新为这层之下的最小值
		}
	}
	int top() 
	{
		if(!dataStack.empty())//非空时进行
			return dataStack.top();
		else return -1;
	}
	int min() 
	{
		return minValue;//直接返回minValue
	}
};