定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度
应为O(1))。
//通过,但是min的时间复杂度不是1
class Solution {
public:
void push(int value) {
m_vec.push_back(value);
}
void pop() {
if (!m_vec.empty())
{
m_vec.pop_back();
}
}
int top() {
if (!m_vec.empty())
{
return m_vec[m_vec.size() - 1];
}
return 0;
}
int min() {
return *(min_element(m_vec.begin(), m_vec.end()));
}
vector<int> m_vec;
};
//借助两个栈,其中一个保存最小值
class Solution {
public:
void push(int value)
{
m_data_stack.push(value);
//一定是>=,不能使>,不然两个1进栈,然后1出,最小值里面就没有1了
if (m_min_stack.empty() || m_min_stack.top() >= value)
{
m_min_stack.push(value);
}
}
void pop()
{
if (m_data_stack.top() == m_min_stack.top())
{
m_min_stack.pop();
}
m_data_stack.pop();
}
int top()
{
return m_data_stack.top();
}
int min()
{
return m_min_stack.top();
}
stack<int> m_data_stack;
stack<int> m_min_stack;
};