题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:使用两个栈,一个存数据,一个存最小值,两个栈中的元素数量始终是一致的,也就是数据栈中push元素时,也要把当前最小值push进最小值栈。
class Solution {
private:
stack<int> m_min;
stack<int> m_data;
public:
void push(int value) {
if(m_min.empty())
m_min.push(value);
else if(m_min.top()<=value)
m_min.push(m_min.top());
else
m_min.push(value);
m_data.push(value);
}
void pop() {
if(!m_data.empty())
{
m_data.pop();
m_min.pop();
}
}
int top() {
if(!m_data.empty())
return m_data.top();
return -1;
}
int min() {
if(!m_min.empty())
return m_min.top();
return -1;
}
};