题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
要求:不仅要获得当前的最小元素,还要获得在此之前的次小元素。
分析:需要建立一个辅助栈来不断依次存放当前的最小元素。每次将数据压入数据栈的时候,都将其与辅助栈的栈顶元素进行比较,如果vlaue比辅助栈顶的元素小,则将value压入辅助栈,否则,重复将辅助栈的栈顶元素压入辅助栈。
但此时,依据以上分析,在牛客网上实现时,却无法通过测试,代码如下:
#include<iostream>
#include<vector>
#include<stack>
class Solution {
public:
void push(int value) {
m_data.push(value);
if (m_min.empty() || value < m_min.top())
m_min.push(value);
else
m_min.push(m_min.top());
}
void pop() {
if (m_data.top() == m_min.top())
m_min.pop();
m_data.pop();
}
int top() {
return m_data.top();
}
int min() {
return m_min.top();
}
private:
std::stack<int>m_data;
std::stack<int>m_min;
};
结果如下:
不知道问题在哪里~~
但是,如果在value大于辅助栈顶元素时,不将辅助栈顶元素重复压入辅助栈,反而通过了算例测试,代码和结果如下:
#include<iostream>
#include<vector>
#include<stack>
class Solution {
public:
void push(int value) {
m_data.push(value);
if (m_min.empty() || value < m_min.top())
m_min.push(value);
//else
//m_min.push(m_min.top());
}
void pop() {
if (m_data.top() == m_min.top())
m_min.pop();
m_data.pop();
}
int top() {
return m_data.top();
}
int min() {
return m_min.top();
}
private:
std::stack<int>m_data;
std::stack<int>m_min;
};
有大神给讲解一下吗?