本文最后更新于: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
}
};
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!