题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
代码
class Solution {
public:
stack<int> datastack;
stack<int> minstack;
void push(int value)
{
datastack.push(value);
if(minstack.size() == 0 || value < minstack.top())
{
minstack.push(value);
}
else
{
minstack.push(minstack.top());
}
}
void pop()
{
if(datastack.size() > 0 && minstack.size() > 0)
{
datastack.pop();
minstack.pop();
}
}
int top()
{
return datastack.top();
}
int min()
{
if(datastack.size() > 0 && minstack.size()>0)
{
return minstack.top();
}
else
{
return 0;
}
}
};
运行结果
运行时间:4ms
占用内存:492k
解题思路
使用了两个栈 datastack 和 minstack,datastack 正常出入栈。
minstack,入栈时,如果入栈元素小于当前栈顶元素,正常入栈,如果入栈元素大于等于当前栈顶元素,重复入栈顶元素